如何解决Android游戏循环可标准化不同设备/屏幕上的游戏速度和时间
我有两个与Android游戏循环相关的问题。
是否有一种方法可以以相同的速度在不同的设备/屏幕尺寸中从左向右移动游戏图形或。
有没有一种方法可以正确地将帧之间的正确经过时间(增量)传播到Sprite,因此我们可以在30秒后隐藏Sprite。目前,我传递给sprite.update
方法的增量还不能完美地跟踪经过的时间。我也想实现游戏暂停,因此在精灵内跟踪时间是有问题的。
我的恶意更新方法
public boolean update(float deltaTime) {
loopTime += deltaTime;
if (loopTime > 30000) {
fullAnimationDone = true;
return false;
}
mYPos -= Interpolation.circle.apply(loopTime) * mScreenHeight;
mXpos = mScreenWidth/2;
return false;
}
我的游戏循环
public void run() {
Canvas canvas;
long ticksPS = 1000 / FPS;
long startTime;
long sleepTime;
long deltaTime = 0;
long totalTime = 0;
mRunning.set(true);
while (mRunning.get()) {
startTime = System.currentTimeMillis();
if (mSurfaceHolder.getSurface().isValid()) {
sprite.update(deltaTime / 1000f);
currentLevelDuration += totalTime;
levelTimeFinished = (currentLevelDuration > levelDurationThresholdMs);
gameOver = levelTimeFinished;
}
canvas = mSurfaceHolder.lockCanvas();
canvas.save();
canvas.drawColor(0,android.graphics.PorterDuff.Mode.CLEAR);
if (gameOver) {
} else {
sprite.draw(canvas);
}
canvas.restore();
mSurfaceHolder.unlockCanvasAndPost(canvas);
deltaTime = (System.currentTimeMillis() - startTime);
sleepTime = ticksPS - deltaTime;
try {
if (gameOver) pause();
if (sleepTime > 0)
sleep(sleepTime);
else
sleep(10);
} catch (Exception e) {
}
totalTime = (System.currentTimeMillis() - startTime);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。