如何实现基于平滑图块的运动

时间:2013-08-10 13:41:36

标签: python pygame

我游戏中的玩家位于屏幕中央,我'滚动'背景移动。

我得到一个用pygame.key.get_pressed()按下的键列表,如果玩家的移动冷却时间结束,我称之为移动功能。此功能可以在一个图块的移动方向上滚动地图。

然而运动不顺畅。它“跳”到下一个瓷砖。

如何实现移动系统以便玩家以小步长(速度* dt)移动,但每次调用移动功能时仍然只移动一个瓦片的距离?我认为游戏需要在每个小步骤之间进行渲染。

完整来源:https://github.com/HCollings/rpg-game/blob/alternate_movement/game.py

1 个答案:

答案 0 :(得分:1)

动画和动作都是关于你所感知的而不是实际发生的事情。在网格系统中,您可以通过获取代码的绘图部分并独立于游戏位置更新绘制位置,从而将玩家的视觉移动抽象出实际的机制。

跳跃时遇到的问题通常采用某种插值技术处理。 lerp()是一个提供线性插值的常用函数,但在我的下面的例子中,我将使用不同的技术。

以下是有关插值技术的资源:http://paulbourke.net/miscellaneous/interpolation/

您可以将您的动作实现为目的地,方向和"未花费的"运动增量。 如果你想移动到一个新的方块,你可以设置你的方向,并为你的"未使用的增量计数器"添加标准数量的增量(代表一个方格)。然后,您在新位置绘制图形,偏移您仍然拥有的增量数。如果你想一次移动多个方格,那么你会增加未使用的增量数。

只要你有未花费的增量(想想运动点),就会发生运动。这种技术也适用于视觉碰撞检测;如果剩余的增量数是你正在移动的方格数之间的总增量(~25%?)的某一部分,那么图形实际上是"根据玩家的看法在广场上。