2013-09-30 39 views
0

我有一个简单的函数,增加了我在屏幕上物体的移动速度:Android的帆布游戏,游戏速度

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

没必要把一切写得大胆。 – WarrenFaith

回答

1

这取决于你想要做什么。一个简单的方法就是让所有东西都与屏幕尺寸成正比。例如:

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

其中REFENRENCE_WIDTH对应于屏幕分辨率,其中您的应用程序的行为如你所愿。

+0

谢谢你,很清楚,我解决了它。 – Moondustt

0

您需要使用密度独立单位。这样,无论像素大小如何,它都会移动相同的相对量。要做到这一点,请确定您的区域将会是多么“大”。例如,在一个逻辑 1000单位解决您的宽度:

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

这意味着,不管有多宽显示屏实际上是,在最大速度,将采取10个运动跨越一路走下去。

0

您可能最好是基于独立于屏幕尺寸的网格系统移动对象。你可以用米,英尺或者单位的任何工作。然后获取设备的屏幕尺寸和屏幕分辨率,并找出它们之间的关系。如果您的物体移动一只脚,那么设备上有多少像素。根据决议。

下面是Android版的屏幕尺寸非常概述: http://developer.android.com/guide/practices/screens_support.html

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

希望至少能让你开始:)