正如标题所说,我正在尝试使用pygame库在python中构建RPG引擎。已经能够构建一个简单的映射引擎,我决定尝试创建一个播放器对象。目前我有两个类,gameObjects和一个主类。我已经能够构建一个在“网格化表面”中移动的玩家对象。我用这段代码完成了这个:
def move(self):
self.start = time.time()
self.timeElapsed = time.time()-self.start
while (self.timeElapsed < .1):
self.timeElapsed = time.time()-self.start
self.x += self.movex
self.y += self.movey
这允许玩家以我选择的任何速度移动,并在游戏循环中被调用:
for event in pygame.event.get():
(code to make the controls, basically modifies the players movex or movey)
player.move()
这一切都很好,但我需要的下一步是让玩家在空间之间“滑动”,也就是说它们不是简单地跳到下一个空间而是在空间之间有一个平滑的移动。我尝试了一些愚蠢的东西,但似乎无法弄清楚正确的方法来解决这个问题。 谢谢!
编辑:我忘了提到的相当重要的事情是,当显示播放器时,我将它们的x和y乘以32,这就是创建32x32网格的原因。这是代码:
screen.blit(player.img, (player.x*32, player.y*32))
答案 0 :(得分:0)
如果self.x
是一个与网格分辨率相同的整数(self.x+1
指向下一个整个网格位置),则需要为中间移动添加小数部分。但是你不必在实际的玩家坐标中添加它,只有在绘图时才需要。
类似的东西:
screen.blit(player.img, (player.x*32 + offset, player.y*32 + offset))
使用0初始化offset
,并在许多步骤中将其增加到32。步数由您决定; 1
使图像移动缓慢,16
几乎立即跳转到下一个位置。 (当然,取决于延迟,在两次连续绘制操作之间。)请注意,您需要一些额外的逻辑来向左或向右,向上或向下移动。
您可能想要考虑这一点,在目前的开发阶段:您可以选择何时来执行此中间步骤;一次一个角色(&#34;按需&#34;),或者,当你按下一些&#34;完成&#34;按钮。在后一种情况下,您将遍历所有移动的角色并使用相同的偏移移动每个角色,因此它们似乎都可以同时移动。