pygame - while 循环使 pygame window 冻结/如何将子弹射出播放器?
pygame - while loop makes pygame window freeze / how do I shoot the bullets out of the player?
所以今天早上又在编程,想写我的小游戏里的玩家可以发射子弹。这工作正常但有一个问题:我写了 'bullet spawner' player.x 和 player.y 的 x 和 y 坐标,我认为子弹会从玩家的位置发射。但他们没有。他们从玩家在游戏开始时的位置射击,而刷怪笼不动。所以我试着用一个 while 循环和 bool isMoving 来做到这一点,只有当玩家移动时才为真:
...
isMoving = False
...
bullets = []
position = (player.x, player.y)
while isMoving:
position = (player.x, player.y)
...
if keys[pygame.K_d] or keys[pygame.K_a] or keys[pygame.K_w] or keys[pygame.K_s] or keys[pygame.K_UP] or keys[pygame.K_DOWN] or keys[pygame.K_LEFT] or keys[pygame.K_RIGHT]:
isMoving = True
else:
isMoving = False
但是如果我现在 运行 pygame,window 就会冻结。如果我再次删除 while 循环,它会起作用,但它会再次从玩家的第一个位置射击。
哦,我在 isMoving 时收到错误消息“:
UnboundLocalError:赋值前引用的局部变量'isMoving'
" 有什么解决办法吗?
Pygame 应该 运行 在主 while 循环中,其中包含所有主要操作。
尝试在开始时设置位置,然后在 while 循环内检查触发 isMoving 更改的 pygame 事件。嵌套的 while 循环会导致 pygame 出现问题。在 while 循环中使用 if 函数而不是另一个 while 循环。例如,
position = (player.x, player.y) # initial position
while isRunning:
isMoving = False
# PyGame event interaction
for event in pygame.event.get():
# Exits loop
if event.type == pygame.QUIT:
isRunning = False
# Check if key is pressed
if event.type == pygame.KEYDOWN:
keys = [pygame.K_a, pygame.K_w, pygame.K_s, pygame.K_d, pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]
if event.key in keys:
isMoving = True
if isMoving:
position = (player.x, player.y)
# do other stuff
所以今天早上又在编程,想写我的小游戏里的玩家可以发射子弹。这工作正常但有一个问题:我写了 'bullet spawner' player.x 和 player.y 的 x 和 y 坐标,我认为子弹会从玩家的位置发射。但他们没有。他们从玩家在游戏开始时的位置射击,而刷怪笼不动。所以我试着用一个 while 循环和 bool isMoving 来做到这一点,只有当玩家移动时才为真:
...
isMoving = False
...
bullets = []
position = (player.x, player.y)
while isMoving:
position = (player.x, player.y)
...
if keys[pygame.K_d] or keys[pygame.K_a] or keys[pygame.K_w] or keys[pygame.K_s] or keys[pygame.K_UP] or keys[pygame.K_DOWN] or keys[pygame.K_LEFT] or keys[pygame.K_RIGHT]:
isMoving = True
else:
isMoving = False
但是如果我现在 运行 pygame,window 就会冻结。如果我再次删除 while 循环,它会起作用,但它会再次从玩家的第一个位置射击。 哦,我在 isMoving 时收到错误消息“: UnboundLocalError:赋值前引用的局部变量'isMoving' " 有什么解决办法吗?
Pygame 应该 运行 在主 while 循环中,其中包含所有主要操作。 尝试在开始时设置位置,然后在 while 循环内检查触发 isMoving 更改的 pygame 事件。嵌套的 while 循环会导致 pygame 出现问题。在 while 循环中使用 if 函数而不是另一个 while 循环。例如,
position = (player.x, player.y) # initial position
while isRunning:
isMoving = False
# PyGame event interaction
for event in pygame.event.get():
# Exits loop
if event.type == pygame.QUIT:
isRunning = False
# Check if key is pressed
if event.type == pygame.KEYDOWN:
keys = [pygame.K_a, pygame.K_w, pygame.K_s, pygame.K_d, pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]
if event.key in keys:
isMoving = True
if isMoving:
position = (player.x, player.y)
# do other stuff