今天早上我再次编程,我想在我的小游戏中编写玩家可以射击子弹的内容。这很好,但有一个问题:我写的是"子弹刷出者"玩家的x和y坐标。X和玩家。我认为子弹会从玩家的位置射出。但他们没有。他们会从玩家在游戏开始时的位置射击,而刷出者不会移动。所以我尝试使用while循环和bool isMoving来实现这一点,只有当玩家移动时才为True:
...
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,窗口就会冻结。如果我再次删除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