2024-09-30 06:34:17 发布
网友
正如标题所说,我如何检查对象(在本例中为rect)当前是否正在pygame中移动
我试图创建一个前一个位置的变量,看看当前位置是否匹配,但它只是在“真”和“假”之间闪烁,我假设这是因为对象的位置变化速度没有超过游戏的更新速度
我当前正在使用以下命令更改对象的位置:
def MoveButton(self,new_xpos,new_ypos): self.x_pos = new_xpos self.y_pos = new_ypos
它是对象类中的一个函数,通过按键不断调用
好的,有多种答案,我们要解决这个问题-最简单的是添加一个prev_x_pos和prev_y_pos并说:
prev_x_pos
prev_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。确保如果没有按下任何移动按钮,该功能将不会运行
self.pos_x -= speed
square.isMoving = False
square.isMoving = True
好的,有多种答案,我们要解决这个问题-最简单的是添加一个
prev_x_pos
和prev_y_pos
并说:然后可以添加checkIfMoving函数:
如果rect正在移动,则返回True。您也可以只添加代码行,而不使用函数,但我建议您将其放入每帧运行的更新函数中。 另一种更简洁的方法是使用向量来整合物理,向量是运动值。使用向量,您可以将它们的值添加到每一帧的pos_x和pos_y,为了确定播放器的实际移动,您只需更改移动向量的值,而不只是执行
self.pos_x -= speed
。它们也集成在大多数游戏库中,包括PyGame。我建议你查一下,因为改进的物理技术通常会让玩家在游戏中的动作感觉更好。 您也可以只在mainloopsquare.isMoving = False
中设置,然后在它运行函数之后立即使用这种方式编写square.isMoving = True
,只要代码正在运行并且正方形实际上正在移动,它就会将其设置为True。确保如果没有按下任何移动按钮,该功能将不会运行相关问题 更多 >
编程相关推荐