2013-04-15 10 views
6

Ich versuche ein Spiel zu bauen und fragte mich, wie würde man gehen, verschiedene Auflösung und Bildschirmgrößen zu unterstützen. Für die Sprite-Position habe ich eine Basisfunktion implementiert, die die Position nach einem bestimmten Verhältnis einstellt, das ich bekomme, indem ich die Breite und Höhe des Bildschirms aus der winSize-Methode von sharedDirector erhalte.Cocos2d für Android unterstützt verschiedene Auflösungen

Aber dieser Ansatz wird nicht getestet, da ich noch etwas entwickeln muss, um den Skalierungsfaktor für Sprites in Abhängigkeit von der Auflösung des Geräts zu berechnen. Kann jemand mir eine Methode und Tipps geben, mit denen ich die Skalierung von Sprite richtig berechnen kann und ein System vorschlagen kann, um die Pixelierung von Sprites zu vermeiden, wenn ich eine solche Methode anwende?

Ich suchte auf Google und fand heraus, dass Cocos2d-x verschiedene Auflösungen und Größen unterstützt, aber ich bin verpflichtet, nur Cocos2d zu verwenden.

EDIT: Ich bin etwas verwirrt, da dies mein erstes Spiel ist. Bitte weisen Sie auf Fehler hin, die ich gemacht habe.

Antwort

9

Okay, ich habe schließlich diese durch das Gerätedisplay denitiy bekommen wie

getResources().getResources().getDisplayMetrics().densityDpi 

und darauf basierende I von PTM-Verhältnis von 0.75,1,1.5,2.0 für LDPI am Multiplikation, MDPI, hdpi und xhdpi beziehungsweise.

Ich ändere auch die Skala der Sprites entsprechend. Und für die Positionierung habe ich 320X480 als Basis beibehalten und dann das mit einem Verhältnis von meinem aktuellen x und y in Pixeln mit meinen Basispixeln multipliziert.

EDIT: einen Code für ein besseres Verständnis Hinzufügen:

public class MainLayer extends CCLayer() 
{ 
CGsize size; //this is where we hold the size of current display 
float scaleX,scaleY;//these are the ratios that we need to compute 
public MainLayer() 
{ 
    size = CCDirector.sharedDirector().winSize(); 
    scaleX = size.width/480f;//assuming that all my assets are available for a 320X480(landscape) resolution; 
    scaleY = size.height/320f; 

    CCSprite somesprite = CCSprite.sprite("some.png"); 
    //if you want to set scale without maintaining the aspect ratio of Sprite 

    somesprite.setScaleX(scaleX); 
    somesprite.setScaleY(scaleY); 
    //to set position that is same for every resolution 
    somesprite.setPosition(80f*scaleX,250f*scaleY);//these positions are according to 320X480 resolution. 
    //if you want to maintain the aspect ratio Sprite then instead up above scale like this 
    somesprite.setScale(aspect_Scale(somesprite,scaleX,scaleY)); 

} 

public float aspect_Scale(CCSprite sprite, float scaleX , float scaleY) 
    { 
     float sourcewidth = sprite.getContentSize().width; 
     float sourceheight = sprite.getContentSize().height; 

     float targetwidth = sourcewidth*scaleX; 
     float targetheight = sourceheight*scaleY; 
     float scalex = (float)targetwidth/sourcewidth; 
     float scaley = (float)targetheight/sourceheight; 


     return Math.min(scalex,scaley); 
    } 
} 
+0

Hallo ich auch auf Cocos2d-android Arbeits i richtige Idee didnt wie Multi-Resolution in Android in cocos2d zu handhaben, weil ich auf Spiel am wrking so ist xml nt Avilabel auf CCLayer Wrrking und All Image aus dem Ordner Assets Kannst du mir bitte geben Sie mir eine kurze Idee Wie zu beheben, wo ich alle Bilder setzen? Bitte sagen Sie mir – ishu

+0

Sie müssen alle Ihre Bilder in Assets, nur Sie haben um es entsprechend der Bildschirmauflösung zu skalieren. Holen Sie sich einfach die winsize von cocos2d, entsprechend der Antwort, die ich 320X480 als Basisauflösung behalten habe, also sind alle meine Assets für 320X480 geeignet, was ich tue ist, dass ich das Verhältnis von Bildschirmbreite und der Breite meiner Basisauflösung erhalte Das gibt mir einen X-Skalierungsfaktor. Ich verwende diese Skala dann für jedes Sprite. Ich hoffe du hast es verstanden. –

+0

ya ich habe es, aber ich habe tu erstellen verschiedene Ordner für alle Bildgröße? – ishu

Verwandte Themen