我试图建立一个游戏,并想知道如何才能支持不同的分辨率和屏幕大小。对于sprite的位置,我实现了一个基本的函数,它根据一定的比例设置位置,我通过shareddirector的winsize方法得到屏幕的宽度和高度。
但是这种方法没有经过测试,因为我还没有开发出一些东西来计算sprite的缩放因子,这取决于设备的分辨率。有没有人能给我一些方法和提示,我可以通过这些方法来正确计算精灵的比例,并建议一个系统,以避免精灵的像素化,如果我真的应用任何这样的方法。
我在google上搜索发现cocos2d-x支持不同的分辨率和大小,但我一定只使用cocos2d。
编辑:我有点困惑,因为这是我的第一场比赛。请指出我可能犯的任何错误。

最佳答案

好吧,我终于做到了,把设备显示成

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

在此基础上,将ldpi、mdpi、hdpi和xhdpi的ptm比分别乘以0.75、1、1.5、2.0。
我也在相应地改变精灵的比例。为了定位,我保留了320x480作为我的底片,然后乘以当前x和y与底片像素的比值。
编辑:添加一些代码以便更好地理解:
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);
    }
}

07-24 09:47