2013-04-15 14 views
6

Próbuję zbudować grę i zastanawiałem się, w jaki sposób można uzyskać obsługę różnych rozdzielczości i rozmiarów ekranu. Dla pozycji sprite'a zaimplementowałem podstawową funkcję, która ustawia pozycję według pewnego stosunku, który otrzymuję, uzyskując szerokość i wysokość ekranu z metody winSize sharedDirector.Cocos2d dla systemu Android obsługujących różne rozdzielczości

Ale to podejście nie jest testowane, ponieważ muszę jeszcze opracować coś do obliczenia współczynnika skalowania dla ikonek w zależności od rozdzielczości urządzenia. Czy ktoś może mi doradzić jakąś metodę i wskazówki, dzięki którym mogę poprawnie obliczyć skalowanie ikonki i zaproponować system, aby uniknąć pikselacji sprite'ów, jeśli zastosuję jakąś taką metodę.

Szukałem w Google i okazało się, że Cocos2d-x obsługuje różne rozdzielczości i rozmiary, ale jestem zobowiązany do korzystania tylko z Cocos2d.

EDYCJA: Jestem nieco zdezorientowany, ponieważ jest to moja pierwsza gra. Proszę wskazać wszelkie błędy, które mogłem popełnić.

Odpowiedz

9

Ok I wreszcie zrobił to przez coraz denitiy wyświetlacza urządzenia jak

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

i oparte na nim jestem, mnożąc przez współczynnik PTM przez 0.75,1,1.5,2.0 dla ldpi, MDPI, hdpi i xhdpi odpowiednio.

Zmieniam również skalę duchów. A dla pozycjonowania utrzymałem 320X480 jako bazę, a następnie pomnożę to przez stosunek moich bieżących xiy w pikselach z moimi podstawowymi pikselami.

EDIT: Dodawanie kodu dla lepszego zrozumienia:

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

Witam pracuje również Cocos2d-android nie zrobił dostać właściwego pojęcia jak obsługiwać wielorozdzielczej w Android w Cocos2d bo jestem wrking na meczu XML nt avilabel wrking na CCLayer i ALl Image Coming From the Assets folder Czy możesz proszę Podaj mi jakiś krótki pomysł Jak to naprawić, czy mogę umieścić wszystkie obrazy? proszę, powiedz – ishu

+0

musisz umieścić wszystkie swoje obrazy w zasobach tylko, po prostu masz skalować zgodnie z rozdzielczością ekranu. Po prostu wygraj z cocos2d, zgodnie z odpowiedzią utrzymałem 320X480 jako moją podstawową rozdzielczość, więc wszystkie moje zasoby nadają się do 320X480, co robię, mam stosunek szerokości ekranu do szerokości mojej podstawowej rozdzielczości, więc to daje mi współczynnik skali X. Następnie stosuję tę skalę dla każdego duszka. Mam nadzieję, że to dostałeś. –

+0

ya mam to, ale mam tu utworzyć inny folder różny dla całego rozmiaru obrazu? – ishu

Powiązane problemy