Cocos2d for android supporting different resolutions

前端 未结 1 709
Happy的楠姐
Happy的楠姐 2021-02-04 18:29

I am trying to build a game and was wondering how would one go about supporting different resolution and screen sizes. For position of sprite I\'ve implemented a basic function

1条回答
  •  旧巷少年郎
    2021-02-04 19:05

    Okay I finally did this by getting the device display denitiy like

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

    and based on it I am multiplying by PTM ratio by 0.75,1,1.5,2.0 for ldpi,mdpi,hdpi,and xhdpi respectively.

    I am also changing the scale of sprites accordingly. And for positioning I've kept 320X480 as my base and then multiplying that with a ratio of my current x and y in pixels with my base pixels.

    EDIT: Adding some code for better understanding:

    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 讨论(0)
提交回复
热议问题