簡體   English   中英

pygame - while 循環使 pygame 窗口凍結/如何將子彈射出玩家?

[英]pygame - while loop makes pygame window freeze / how do I shoot the bullets out of the player?

所以今天早上我又在編程,我想寫我的小游戲中的玩家可以發射子彈。 效果很好,但有一個問題:我為“子彈生成器” 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,窗口就會凍結。 如果我再次刪除 while 循環,它會起作用,但它會再次從玩家的第一個位置射擊。 哦,我收到錯誤“while isMoving: UnboundLocalError: local variable 'isMoving' referenced before assignment “有什么辦法解決這個問題嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM