【问题标题】:Pacman Array - Smooth MovementPacman Array - 平滑运动
【发布时间】:2012-01-07 04:22:51
【问题描述】:

请参阅Having Some Issues With Making Pacman 以完全理解这个问题。只需查看已接受答案的第一部分。这是在java中!

我正在使用上面链接中显示的数组。我的 pacman 角色移动得很好,除了它每 100 毫秒移动 21 个像素,因此它根本不平滑。

目前我只是将当前数组位置的 x 和 y 乘以 21。我想知道如何使这变得平滑。我尝试了一些移动的方法,但都没有奏效,而且我不是很熟练,而且我的方法效率不高,所以我来这里寻找一个平稳移动的好方法。

您可能需要了解的一些事项: Pacman 首先检查按键方向的位置。(例如:右箭头向下。清楚吗?) 如果清除,它将继续调用另一个处理移动 pacman 的类,直到有墙或敌人。

【问题讨论】:

    标签: java arrays pacman


    【解决方案1】:

    您需要创建两个循环。一个游戏循环,它计算出游戏的逻辑,每 100 毫秒运行一次,还有一个动画循环,它运行得更频繁,可能每 20 毫秒运行一次,并计算所有精灵应该在哪里。

    // in pseudo code
    sleep 20 ms
    if i++ % 5 == 0
        do game loop
    do animation loop with i
    // passing i to animation loop will allow you to easily calculate how far sprite is along path to destination
    

    【讨论】:

    • 好的,我试试这个。但是我将如何做 pacman 的运动呢?因为它现在正在将数组相乘,这样只会加快移动速度。
    • 可能类似于:(array_from - array_to) / 5 * i
    • 我只是高中java的第一学期所以我不明白。
    • 好的,基本上我的意思是得到移动的总距离,你可以通过从终点减去起点并得到绝对值来计算(确保它是一个正值) .当你有那个距离(你想要移动的距离)时,你可以通过除以你想要的步数将它分成几个步骤 - 这里我使用了 5。然后在你的动画循环中,你知道 i 的值(你在哪一步开启),因此您将其相乘以获得在任何时间点您应该移动多远的最终值。可以将此值添加到起始值以获取坐标。
    【解决方案2】:

    人眼大约每 100 毫秒可以看到一帧,有些人的视觉速度比这更快。您可能希望将帧速率提高到至少 20FPS(相当于每 50 毫秒一帧)。如果你想让吃豆人以同样的速度移动,你可以将距离减半,速度加倍(让他每 50 毫秒移动 10 或 11 个像素)。

    请参阅The Wikipedia article on framerate 了解更多基本背景信息,并了解其他人成功使用的内容。

    【讨论】:

    • 是的,这样做会很好,但我不知道如何......同时使用这样的数组。
    • 这应该与迷宫的存储方式或执行移动的方式完全无关。相反,这与更新用户界面的代码有关。
    • 即使是“普通”人类也会注意到 10fps 的显着变化(除非这只移动 非常小的量)!我的目标是~30fps,对于像吃豆人这样的游戏来说,这是完全合理的!由于计时器分辨率 CPU/JVM 执行速度各不相同,因此在执行动画时必须考虑到 时间增量 —— 否则在一个动画上可以执行的操作会太慢或太慢另一个快。
    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多