我有一个简单的功能,可以提高屏幕中对象的速度:
float Velocity = 10;
float MaxVelocity = 100;
float VelocityGiven = 0;
RectF position = new RectF(ScreenHeight/2, ScreenWidth,0,0);
public void update()
{
if(VelocityGiven < MaxVelocity)
{
Position.left -= Velocity;
VelocityGiven += Velocity;
}
}
public void draw(Canvas canvas)
{
canvas.drawBitmap(Bitmap,Position,null);
}
但是,根据手机屏幕尺寸或像素密度,此功能会使对象移动太快或太慢。
如果我在星系S4上尝试,那么女巫的屏幕分辨率非常高,物体的速度很慢。
但如果我在低端设备(小屏幕)上试用它,对象会非常快, 我该怎么做才能避免这种情况?
我已经控制了我的FPS,每部手机都以30 FPS运行。所以这不是更新率。
答案 0 :(得分:1)
这取决于你想要做什么。一种简单的方法是使一切与屏幕尺寸成比例。例如:
Position.left -= Velocity * getWidth() / REFERENCE_WIDTH;
其中REFENRENCE_WIDTH对应于您的应用根据需要运行的屏幕分辨率。
答案 1 :(得分:0)
您需要使用与密度无关的单位。这样,无论像素大小如何,它都会移动相同的相对量。要做到这一点,请确定您所在地区的“大”程度。例如,要将宽度固定为逻辑 1000个单位:
float scaleWidth = (screenWidth / 1000);
float velocity = 10 * scaleWidth;
float maxVelocity = 100 * scaleWidth;
这意味着无论显示器实际有多宽,在最大速度下,都需要10次移动才能完成。
答案 2 :(得分:0)
最好根据网格系统移动对象,而与屏幕大小无关。你可以用米,英尺或者什么作为你的单位。然后获取设备的屏幕尺寸和屏幕分辨率,并找出关系是什么。如果您的对象移动一英尺,那么设备上的像素数是多少。基于决议。
以下是关于android的屏幕尺寸的一般概述: http://developer.android.com/guide/practices/screens_support.html
可能有更多,更好的地方可以寻找获得设备分辨率和尺寸的地方。
希望至少能让你开始:)