用太空欄射擊子彈
這個問題涉及在按下太空欄時實現射擊子彈的能力,同時在屏幕上保持玩家角色。 &&&&
問答代碼最初存在一個問題,在拍攝時,播放器角色消失了。這是因為將射擊和玩家運動分為不同的循環。為了解決這個問題,我們需要將它們合併為單個主循環,在該循環中同時更新兩種行為。
另一個問題是當子彈到達屏幕頂部時,無法打破射擊環。原始代碼使用了一段段循環,該循環持續了無限。為了解決此問題,我們需要使用一個wire循環,該循環的條件可以檢查子彈是否已達到頂部。
代碼dimendanation
這是代碼的修訂版本:
導入pygame,OS
#簡潔的樣板設置
班級球員:
def __init __(self,x,y,高度,寬度):
...
def draw(self):
...
def move_left(self):
...
def move_right(self):
...
班級子彈:
def __init __(self,x,y):
...
def Update(self):
...
def draw(self):
...
#子彈清單
子彈= []
#初始化播放器
p =球員(600、500、50、30)
#主遊戲循環
運行= true
運行時:
clock.tick(100)
#處理事件
對於pygame.event.get()中的活動:
如果event.type == pygame.quit:
run = false
如果event.type == pygame.keydown:
如果event.key == pygame.k_space:
Bullets.Append(子彈(P.X P.Width // 2,P.Y))
#更新對象
鍵= pygame.key.get_presse()
如果鍵[pygame.k_left]:
p.move_left()
如果鍵[pygame.k_right]:
p.move_right()
對於子彈中的B:
b.update()
#更新位置並在屏幕外刪除子彈
如果B.Y< 0:
子彈。
#更新框架
D.Fill((98,98,98))
對於子彈中的B:
B.Draw()
p.draw()
win.update()
鍵更改:
現在,拍攝和播放器運動邏輯被合併到一個主遊戲循環中。