我想建立一个游戏,不知道如何将一个去支持不同的分辨率和屏幕尺寸。 对于子画面的位置,我实现它设置按一定比率,这是我获得通过获得从sharedDirector的使用winsize方法的屏幕宽度和高度的位置的基本功能。
但是,这种方法没有进行测试,因为我还没有开发的东西来计算比例因子取决于设备的分辨率精灵。 有人可以告诉我一些方法和技巧的,我可以正确计算精灵的缩放,并提出一个系统,以避免精灵的像素化,如果我不应用任何这样的方法。
我搜索谷歌和发现的Cocos2D-X支持不同的分辨率和尺寸,但我一定只使用了cocos2d。
编辑:我有点困惑,因为这是我的第一场比赛。 请指出,我可能犯任何错误。
好吧,我终于通过获取设备显示denitiy像这样做
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);
}
}