Pygame如何检查对象当前是否正在移动

2024-09-30 06:34:17 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题所说,我如何检查对象(在本例中为rect)当前是否正在pygame中移动

我试图创建一个前一个位置的变量,看看当前位置是否匹配,但它只是在“真”和“假”之间闪烁,我假设这是因为对象的位置变化速度没有超过游戏的更新速度

我当前正在使用以下命令更改对象的位置:

def MoveButton(self,new_xpos,new_ypos):
    self.x_pos = new_xpos
    self.y_pos = new_ypos

它是对象类中的一个函数,通过按键不断调用


Tags: 对象posrect命令self游戏标题new
1条回答
网友
1楼 · 发布于 2024-09-30 06:34:17

好的,有多种答案,我们要解决这个问题-最简单的是添加一个prev_x_posprev_y_pos并说:

def MoveButton(self,new_xpos,new_ypos):
    self.prev_x_pos = self.x_pos
    self.prev_y_pos = self.y_pos
    self.x_pos = new_xpos
    self.y_pos = new_ypos

然后可以添加checkIfMoving函数:

def checkIfMoving(self):
    self.isMoving = (self.prev_x_pos - self.x_pos != 0 or self.prev_y_pos - self.y_pos != 0)

如果rect正在移动,则返回True。您也可以只添加代码行,而不使用函数,但我建议您将其放入每帧运行的更新函数中。 另一种更简洁的方法是使用向量来整合物理,向量是运动值。使用向量,您可以将它们的值添加到每一帧的pos_x和pos_y,为了确定播放器的实际移动,您只需更改移动向量的值,而不只是执行self.pos_x -= speed。它们也集成在大多数游戏库中,包括PyGame。我建议你查一下,因为改进的物理技术通常会让玩家在游戏中的动作感觉更好。 您也可以只在mainloop square.isMoving = False中设置,然后在它运行函数之后立即使用这种方式编写square.isMoving = True,只要代码正在运行并且正方形实际上正在移动,它就会将其设置为True。确保如果没有按下任何移动按钮,该功能将不会运行

相关问题 更多 >

    热门问题