如何在设定的时间内将游戏对象从屏幕的一侧移动到另一侧?

时间:2014-04-29 20:38:02

标签: android coordinates

让我们假设我想在屏幕上制作一个带有简单对象的安卓游戏。对象从x = 0开始,到x =屏幕右侧结束。

让我们假设我们生活在一个完美的世界中,每个设备都以30 FPS的速度运行。我当然可以使用下面的代码片段从“0”点到“屏幕右侧”,但由于碎片,它肯定会在每个设备上花费不同的时间。

while(x < rightSideOfScreen)
 x++;

我所知道的唯一坐标系是android.graphics.Point,这是我目前在游戏中使用的。

  1. 有更好的方法来管理2D游戏坐标吗?
  2. 如何让所有设备上的简单游戏对象在相同的时间内从“0”点到达“屏幕右侧”?

2 个答案:

答案 0 :(得分:0)

  1. 取决于您的要求。如果你的游戏中包含这个对象在不变的时间内从左向右移动,那么这可能就是你所需要的。如果您正在进行3D FPS射击游戏,您可能需要查看matricesquaternions等。中间有可以帮助您的引擎和库,例如{{3} }。

  2. 以下是一些代码(未经测试):

  3. [...]

    long animationStartTime=System.currentTimeMillis();
    final long CONSTANT_LEFT_TO_RIGHT_TIME = 10*1000;//10 seconds in millis
    
    @Override
    protected void onDraw(Canvas canvas) {
        final long now = System.currentTimeMillis();
        final int w=canvas.getWidth();
        final long timePassed=now-animationStartTime;
        final int x=(timePassed*w)/CONSTANT_LEFT_TO_RIGHT_TIME; // Calculate position deterministically based on time since animation start
        canvas.drawBitmap(myObjectBitmap, x , 100, null);
        //Just for fun, loop the animation
        if(x>w){
            animationStartTime=now;
        }
    }
    

答案 1 :(得分:0)

使用插值我猜:

targetX = rightSideOfScreen;


x += (targetX - x) * 0.08f * delta * FPS;

使用0.08f值

完美的世界&#34;你正在谈论的是我上面的例子。通过将移动与render()方法中传递的delta相乘,可以确保它在所有设备上运行相同。