如何让一个pygame的声音只播放一次,然后停止,直到再次满足要求?



我正在制作一个精灵收集游戏,我收集精灵并计算分数。如果我撞到墙上,它会发出撞墙的声音。当我撞墙时,我只想让声音播放一次,然后不要播放,直到再次满足要求。这是我的代码,声音与墙壁碰撞。

def wallCollide():
if player.rect.x == 1 and player.rect.y < 479:
bumpWall.play()
if player.rect.y == 1 and player.rect.x < 479:
bumpWall.play()
if player.rect.x == 478 and player.rect.y < 479:
bumpWall.play()
if player.rect.y == 478 and player.rect.x < 479:
bumpWall.play()

快速技巧是将玩家移动(传送(距离墙壁 2~5 像素,与玩家撞到墙壁的同一帧。

但是,如果您希望玩家留在墙内和/或滑到墙附近,那么您需要更强大的解决方案。使用状态机:

PL_STATE_WITHIN_BOUNDS = 1
PL_STATE_JUST_HIT_THE_WALL = 2
PL_STATE_COLLIDING_WITH_THE_WALL = 3
def calc_next_player_state(player, pl_state):
# Convert your `wallCollide` to return bool:
# - False when within bounds
# - True when colliding with the wall
if is_colliding_with_the_wall(player):
if pl_state == PL_STATE_WITHIN_BOUNDS:
return PL_STATE_JUST_HIT_THE_WALL
else:
return PL_STATE_COLLIDING_WITH_THE_WALL
else:
return PL_STATE_WITHIN_BOUNDS
pl_state = PL_STATE_WITHIN_BOUNDS
while True:  # Game's main loop
# ...
pl_state = calc_next_player_state(player, pl_state)
if pl_state == PL_STATE_JUST_HIT_THE_WALL:
bump_wall.play()
# ...

最新更新