2011-11-27 44 views
0

请参阅Having Some Issues With Making Pacman以完全理解此问题。只要看看接受答案的第一部分即可。这是在Java!Pacman Array - 平滑运动

我正在使用上面链接中显示的数组。我有我的pacman角色移动到另一个地方,然后它每隔100ms移动21个像素,因此它一点都不光滑。

目前我只是将当前数组位置的x和y乘以21.我想知道如何去做这个平滑。我尝试了一些如何移动的方法,但他们没有工作,我也不是很熟练,而且我的方法也没有效率,所以我来这里寻找一个顺利移动的好方法。

,你可能需要知道的一些事情: 吃豆子首先在按键的方向检查点。(例如:右箭头向下是否清楚?) 如果明确表示将继续调用其他类处理移动直到有墙壁或敌人。

回答

1

您需要创建两个循环。一个游戏循环,计算出游戏逻辑,每100ms运行一次,一个动画循环,运行更频繁,可能每20ms计算一次所有精灵的位置。

// 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 
+0

好吧,我会试试这个。但是,我将如何做pacman的运动?因为它现在正在增加阵列,所以只会加速运动。 – ComputerLocus

+0

也许是这样的:'(array_from - array_to)/ 5 * i' –

+0

我只在高中的java第一学期,所以我不明白这一点。 – ComputerLocus

2

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

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

+0

是的,这样做会很好,但我不知道如何......而使用这样的数组。 – ComputerLocus

+0

这应该与迷宫的存储方式或移动的执行方式完全无关。相反,这涉及更新用户界面的代码。 –

+0

即使是“平均”的人类也会注意到10fps的显着变化(除非这只会移动一个非常小的量)!我的目标是~30fps,对于像Pacman这样的游戏来说,这是合理的!由于定时器分辨率*和* CPU/JVM执行速度不同,因此在执行动画时必须考虑到*时间增量*,或者其中一个的好处会在另一个上太慢或太快。 – 2011-11-27 04:08:10