我试图使3个图像的精灵动画,我需要的动画播放在一次鼠标点击。
我试着使用这个代码,它适用于站立和行走的动画,但当我使用它进行拍摄时,动画不会发生,因为鼠标点击速度很快(虽然我按住了鼠标按键,它仍然有效)。
if self.standing:
if now - self.last_update > 50:
self.last_update = now
self.current_frame = (self.current_frame + 1) % len(self.game.player_idles)
self.image = pg.transform.scale(self.game.player_idles[self.current_frame], (64, 55))
self.image_copy = pg.transform.rotate(self.image, 270)
发布于 2019-05-22 03:12:04
使用事件队列。
在update
中,替换:
if mouse[0]:
self.shooting = True
self.standing = False
self.moving = False
else:
self.shooting = False
通过以下方式:
for event in pygame.event.get():
if e.type == MOUSEBUTTONDOWN:
shoot()
然后,您可以完全删除shooting
bool,并将if self.shooting
所做的图形更改添加到shoot
函数中。或者,如果您想保留shooting
布尔值,可以这样做:
for event in pygame.event.get():
if e.type == MOUSEBUTTONDOWN:
self.shooting = True
self.moving = False
self.standing = False
if e.type == MOUSEBUTTONUP:
self.shooting = False
此代码的响应性更好,因为它在用户输入事件(单击)时工作,而不是在按下鼠标按钮时工作。
发布于 2019-05-22 02:16:42
我不知道你是如何调用拍摄部分的动画的。
你能为此发布你的代码吗?然后我可能会告诉你更多。否则,我的代码可能没有意义/用处。我对此感到抱歉。(我还不能发表评论)
检查pygame事件中的鼠标单击状态。如果您发现点击,将其存储在一个(S)标志中,就像您对站立部件所做的那样。
我们将在这里使用一个名为click_animation_state的变量来查看我们当前所在的帧。
self.game.shooting_frames = [img1, img2, img3]
if self.mouse_clicked:
if now - self.last_update > time_threshold:
self.last_update = now
self.current_frame = (self.current_frame + 1) %
len(self.game.shooting_frames)
self.image = pg.transform.scale(self.game.click_frames[self.current_frame], (64, 55))
self.image_copy = pg.transform.rotate(self.image, 270)
https://stackoverflow.com/questions/56243969
复制相似问题