我游戏中的玩家位于屏幕中央,我'滚动'背景移动。
我得到一个用pygame.key.get_pressed()
按下的键列表,如果玩家的移动冷却时间结束,我称之为移动功能。此功能可以在一个图块的移动方向上滚动地图。
然而运动不顺畅。它“跳”到下一个瓷砖。
如何实现移动系统以便玩家以小步长(速度* dt)移动,但每次调用移动功能时仍然只移动一个瓦片的距离?我认为游戏需要在每个小步骤之间进行渲染。
完整来源:https://github.com/HCollings/rpg-game/blob/alternate_movement/game.py
答案 0 :(得分:1)
动画和动作都是关于你所感知的而不是实际发生的事情。在网格系统中,您可以通过获取代码的绘图部分并独立于游戏位置更新绘制位置,从而将玩家的视觉移动抽象出实际的机制。
跳跃时遇到的问题通常采用某种插值技术处理。 lerp()是一个提供线性插值的常用函数,但在我的下面的例子中,我将使用不同的技术。
以下是有关插值技术的资源:http://paulbourke.net/miscellaneous/interpolation/
您可以将您的动作实现为目的地,方向和"未花费的"运动增量。 如果你想移动到一个新的方块,你可以设置你的方向,并为你的"未使用的增量计数器"添加标准数量的增量(代表一个方格)。然后,您在新位置绘制图形,偏移您仍然拥有的增量数。如果你想一次移动多个方格,那么你会增加未使用的增量数。
只要你有未花费的增量(想想运动点),就会发生运动。这种技术也适用于视觉碰撞检测;如果剩余的增量数是你正在移动的方格数之间的总增量(~25%?)的某一部分,那么图形实际上是"根据玩家的看法在广场上。