Android实时游戏——实现时间单位

标签 android real-time

我会尽力解释我的意思。 我正在开发一款 2d 游戏。当我在小屏幕上运行下面的代码时,它比在大屏幕上运行相同的代码更快。我认为这取决于游戏循环的迭代在大屏幕上比在小屏幕上花费更多的时间。我如何实现 time unit 或其他不依赖于游戏循环迭代的东西?

private void createDebris(){
    if(dx<=0) return;
    if(stepDebris==2){          
        Debris debris = new Debris(gameActivity, dx-=1280*coefX/77, 800*coefY-50*coefY, coefX, coefY);
        synchronized (necessaryObjects) {
            necessaryObjects.add(debris);
        }
        stepDebris=-1;
        Log.e("COUNT", (count++)+"");
    }
    stepDebris++;
}

附言 fragment 是画在 Canvas 上的视觉对象。我会很感激你的回答。谢谢。

最佳答案

如果 stepDebris 是您在屏幕上移动对象的单位 - 那么在每次绘制调用时增加它是错误的,因为它将移动速率与帧率联系在一起。

你想要的是这样的

    stepDebris += elapsedMilliseconds * speedFactor

其中 elapsedMilliseconds 是游戏开始后耗时(以毫秒为单位)。一旦您为 stepDebris 找到正确的 speedFactor - 无论帧率如何,它都会在不同的机器/分辨率上以相同的速度移动。

希望这对您有所帮助!

关于Android实时游戏——实现时间单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915862/

相关文章:

android - 来自画廊的视频选择 : Limit only videos up to 30 seconds should be selected

android - 运行 "cordova build android"- 无法找到属性 android :fontVariationSettings and android:ttcIndex

android - 使用功能的分层逻辑?

c - 解析两个数字 - 高位数字和个位数字

Android 为 wifi-direct 重命名设备名称

android - Youtube 视频到 videoview android 错误

linux-kernel - Linux 驱动程序实时限制

linux - Linux 中的 getrusage(RUSAGE_THREAD, ...) 和 clock_gettime(CLOCK_THREAD_CPUTIME_ID, ...) 有什么区别?

docker - 如何使用Kubernetes和websocket做多人在线游戏?

c++ - 需要帮助来选择实时操作系统和硬件