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

}
iCMS 回答:Android游戏循环可标准化不同设备/屏幕上的游戏速度和时间

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1518507.html

大家都在问