Android画布游戏,游戏速度

时间:2013-09-30 15:21:18

标签: android canvas

我有一个简单的功能,可以提高屏幕中对象的速度:

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运行。所以这不是更新率。

3 个答案:

答案 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

可能有更多,更好的地方可以寻找获得设备分辨率和尺寸的地方。

希望至少能让你开始:)