作为为Android编写实时游戏的一个自然部分,我需要能够支持各种屏幕分辨率,密度等。
从Android SDK文档中的primary article,我知道我应该为游戏中的每个位图创建单独的资源,以适应不同的屏幕密度;但是我不太明白如何处理位置,速度等等。
该文档说我应该在代码中使用与密度无关的单位,无论我使用显式值。但这是不是意味着我需要将绝对像素转换为与密度无关的单位每次我使用显式值?
例如,我正在使用高密度800x480显示器开发一款游戏(横向拍摄)。现在,我很乐意每帧移动1个像素的精灵(在 delta时间后等)。所以这看起来像:
sprite.setVelocityX(1);
如果我使用与密度无关的单位,就像文档建议的那样,我不会做这样的无处不在,我使用的是明确的数字吗?
sprite.setVelocityX(convert(1));
public float convert(float value)
{
return value * getResources().getDisplayMetrics().density;
}
感觉我没有正确理解这一点......
答案 0 :(得分:1)
我没有动画方面的经验,但我想到的第一个想法是将单位定义为
static int UNIT = getResources().getDisplayMetrics().density;
然后将其用作
sprite.setVelocityX(3*UNIT); // replaces sprite.setVelocityX(3);
这样你就可以创建一次int,并且每次都避免查询DisplayMetrics
。
也就是说,可能有OpenGL或AndEngine机制直接获得与密度无关的值。