0

正如标题所说,我正在尝试使用 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))
4

1 回答 1

0

如果您self.x是与网格具有相同分辨率的整数(self.x+1指向下一个整个网格位置),则需要为中间移动添加小数部分。但是您不必在实际的玩家坐标中添加它,仅在绘制时才需要。

就像是:

screen.blit(player.img, (player.x*32 + offset, player.y*32 + offset))

offset使用 0 进行初始化,并在多个步骤中将其增加到 32。步数由您决定;1使图像移动缓慢,16几乎立即跳到下一个位置。(当然,取决于两个连续绘制操作之间的延迟。)请注意,您需要一些额外的逻辑来向左或向右以及向上或向下移动。

您可能要考虑一下,在当前的开发阶段:您可以选择何时进行此中间步进;一次一个角色(“按需”),或者,当您按下某个“完成”按钮时,基于回合的风格。在后一种情况下,您将遍历所有移动角色并以相同的偏移量移动它们,因此它们似乎都在同时移动。

于 2013-07-28T01:45:00.377 回答