让我们假设我想在屏幕上制作一个带有简单对象的安卓游戏。对象从x = 0开始,到x =屏幕右侧结束。
让我们假设我们生活在一个完美的世界中,每个设备都以30 FPS的速度运行。我当然可以使用下面的代码片段从“0”点到“屏幕右侧”,但由于碎片,它肯定会在每个设备上花费不同的时间。
while(x < rightSideOfScreen)
x++;
我所知道的唯一坐标系是android.graphics.Point,这是我目前在游戏中使用的。
答案 0 :(得分:0)
取决于您的要求。如果你的游戏中包含这个对象在不变的时间内从左向右移动,那么这可能就是你所需要的。如果您正在进行3D FPS射击游戏,您可能需要查看matrices和quaternions等。中间有可以帮助您的引擎和库,例如{{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相乘,可以确保它在所有设备上运行相同。