0

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

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);
}

但根据手机屏幕尺寸或像素密度,此功能移动对象太快或太慢。

如果我在 Galaxy S4 上尝试,女巫的屏幕分辨率非常大,物体移动速度很慢。

但是如果我在低端设备(小屏幕)上尝试它,对象会非常快,我该怎么做才能避免这种情况?

我已经在每部手机上控制了我的 FPS,它以 30 FPS 运行。所以这与更新率无关。

4

3 回答 3

1

这取决于你想做什么。一种简单的方法是使所有内容都与屏幕尺寸成正比。例如:

Position.left -= Velocity * getWidth() / REFERENCE_WIDTH;

其中 REFENRENCE_WIDTH 对应于您的应用按照您喜欢的方式运行的屏幕分辨率。

于 2013-09-30T15:33:07.780 回答
0

您需要使用与密度无关的单位。这样,无论像素大小如何,它都会移动相同的相对量。为此,请确定您的区域将有多大。例如,要将宽度固定在逻辑1000 单位:

float scaleWidth = (screenWidth / 1000);
float velocity = 10 * scaleWidth;
float maxVelocity = 100 * scaleWidth;

这意味着无论显示器实际有多宽,在最大速度下,它都需要 10 次移动才能一直穿过。

于 2013-09-30T15:33:23.040 回答
0

您可能最好根据与屏幕大小无关的网格系统来移动对象。您可以使用米、英尺或任何可以作为单位的单位。然后得到设备的屏幕尺寸和屏幕分辨率,搞清楚是什么关系。如果您的对象移动一英尺,那么设备上有多少像素。基于分辨率。

以下是关于 android 屏幕尺寸的非常笼统的概述:http: //developer.android.com/guide/practices/screens_support.html

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

希望至少能让你开始:)

于 2013-09-30T15:33:29.433 回答