2013-04-15 27 views
6

Bir oyun kurmaya çalışıyorum ve farklı çözünürlük ve ekran boyutlarını desteklemeye nasıl devam edeceğini merak ediyorum. Sprite'ın pozisyonu için pozisyonu belli bir orana göre ayarlayan temel bir fonksiyon uygulamıştım, ekran genişliğini ve yüksekliğini sharedDirector'ın winSize yönteminden alıyorum. Cihazın çözünürlüğüne bağlı olarak spritelar için ölçekleme faktörünü hesaplamak için henüz bir şey geliştirmediğim için bu yaklaşım test edilmemiştir. Birisi bana sprite ölçeklendirmesini doğru bir şekilde hesaplayabildiğim ve herhangi bir yöntem uygularsam spritelı piksellerden kaçınmak için bir sistem önerebileceğim bazı yöntemler ve ipuçları önerebilir.Farklı çözünürlükleri destekleyen android için Cocos2d

Google'da arama yaptım ve Cocos2d-x'nin farklı çözünürlükleri ve boyutları desteklediğini ancak yalnızca Cocos2d'yi kullanmam gerektiğini öğrendim.

DÜZENLEME: İlk oyunum olduğu için kafam karıştı. Lütfen yaptığım herhangi bir hataya dikkat edin.

cevap

9

Tamam nihayet

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

gibi cihaz ekran denitiy alarak bu yaptım ve LDPI, MDPI, hdpi ve xhdpi için 0.75,1,1.5,2.0 tarafından PTM oranı ile çarpılması am ona dayalı sırasıyla.

Ayrıca spriteların ölçeğini de değiştiriyorum. Ve konumlandırma için 320X480'i temelim olarak tuttum ve sonra da benim mevcut piksellerim ile piksellerimi temel piksellerimle çarpıyorum.

DÜZENLEME : Daha iyi anlaşılması için bazı kodlar ekleme:

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

Merhaba ben de i Oyunu üzerinde wrking ediyorum çünkü Cocos2D içinde android içinde çokçözünürlüklü nasıl işleneceğini doğru fikir edinmek yoktu Cocos2d-android On çalışma böylece xml nt olduğunu CCLayer ve ALl Image üzerinde yazan avilabel Varlıklar klasöründen Geliyor Bana biraz Kısa bir fikir ver Canım tüm görüntüleri koyduğum yerde bunu düzeltmek için lütfen bana lütfen tüm resimlerinizi sadece – ishu

+0

'a koymanız gerekecek. Ekran çözünürlüğüne göre ölçeklendirmek için. Sadece cevapları cocos2d gelen winsize, 320X480 benim temel çözünürlüğüm olarak tuttuğuna göre, benim tüm varlıkları 320X480 için uygun, ne yaptığımı genişlik ekran ve benim temel çözünürlük genişliğimi almak Bu bana bir X ölçek faktörü veriyor. Daha sonra bu ölçeği her hareketli grafiğe uygularım. Umarım anladın. –

+0

ya anladım ama tüm görüntü boyutu için farklı farklı klasör oluşturmam gerekiyor mu? – ishu