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 (将#修改为@)