《python編程從入門到實(shí)踐》中在學(xué)習(xí)外星人入侵項(xiàng)目中運(yùn)行程序時(shí)出現(xiàn)報(bào)錯(cuò) AttributeError: 'Event' object has no attribute 'key'
錯(cuò)誤代碼如下:
# coding = utf-8
import sys
import pygame
from settings import Settings
from ship import Ship
class AlienInvasion:
"""管理游戲資源與行為的類"""
def __init__(self):
"""初始化游戲并創(chuàng)建游戲資源"""
pygame.init()
self.settings = Settings()
self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
self.settings.screen_width = self.screen.get_rect().width
self.settings.screen_height = self.screen.get_rect().height
pygame.display.set_caption("Alien Invasion")
self.ship = Ship(self)
def run_game(self):
"""開始游戲的主循環(huán)"""
while True:
self._check_events()
self.ship.update()
self._update_screen()
def _check_events(self):
"""響應(yīng)按鍵和鼠標(biāo)事件"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
self._check_keydown_events(event)
elif event.type == pygame.KEYUP:
self._check_keyup_events(event)‘
#按Q鍵退出游戲
elif event.key == pygame.K_q:
sys.exit()
def _check_keydown_events(self,event):
"""響應(yīng)按鍵"""
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.moving_left = True
def _check_keyup_events(self,event):
"""響應(yīng)松開"""
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False
def _update_screen(self):
"""更新屏幕上的圖像,并切換到新屏幕"""
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
pygame.display.flip()
if __name__ == "__main__":
#創(chuàng)建游戲?qū)嵗⑦\(yùn)行游戲
ai = AlienInvasion()
ai.run_game()
運(yùn)行錯(cuò)誤提示
C:\Users\魚語(yǔ)雨\Desktop\python\python\alien_invasion>python alien_invasion.py
pygame 2.1.2 (SDL 2.0.18, Python 3.10.2)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "C:\Users\魚語(yǔ)雨\Desktop\python\python\alien_invasion\alien_invasion.py", line 69, in <module>
ai.run_game()
File "C:\Users\魚語(yǔ)雨\Desktop\python\python\alien_invasion\alien_invasion.py", line 25, in run_game
self._check_events()
File "C:\Users\魚語(yǔ)雨\Desktop\python\python\alien_invasion\alien_invasion.py", line 39, in _check_events
elif event.key == pygame.K_q:
AttributeError: 'Event' object has no attribute 'key'
導(dǎo)致錯(cuò)誤的原因?yàn)椤?#按Q鍵退出游戲”這部分程序中“elif event.key == pygame.K_q:”這句語(yǔ)句寫在了與 事件類型 “event.type == pygame.KEYDOWN:” 并列的位置上。
“KEYDOWN”和“KEYUP”作為 鍵盤事件,其提供了一個(gè)成員屬性key,通過該屬性來(lái)獲取本次鍵盤事件的內(nèi)容,及按下了那個(gè)按鍵,所以“event.key”不能與“event.type”處于并列位置。
使用pygame處理事件時(shí),邏輯一般是先判斷事件類型,然后在根據(jù)不同的事件操作,執(zhí)行不同的游戲操作,及先判斷事件類型,再判斷事件內(nèi)容。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-503653.html
正確代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-503653.html
# coding = utf-8
import sys
import pygame
from settings import Settings
from ship import Ship
class AlienInvasion:
"""管理游戲資源與行為的類"""
def __init__(self):
"""初始化游戲并創(chuàng)建游戲資源"""
pygame.init()
self.settings = Settings()
self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
self.settings.screen_width = self.screen.get_rect().width
self.settings.screen_height = self.screen.get_rect().height
pygame.display.set_caption("Alien Invasion")
self.ship = Ship(self)
def run_game(self):
"""開始游戲的主循環(huán)"""
while True:
self._check_events()
self.ship.update()
self._update_screen()
def _check_events(self):
"""響應(yīng)按鍵和鼠標(biāo)事件"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
self._check_keydown_events(event)
elif event.type == pygame.KEYUP:
self._check_keyup_events(event)
def _check_keydown_events(self,event):
"""響應(yīng)按鍵"""
if event.key == pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.moving_left = True
#按Q鍵退出游戲
elif event.key == pygame.K_q:
sys.exit()
def _check_keyup_events(self,event):
"""響應(yīng)松開"""
if event.key == pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key == pygame.K_LEFT:
self.ship.moving_left = False
def _update_screen(self):
"""更新屏幕上的圖像,并切換到新屏幕"""
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
pygame.display.flip()
if __name__ == "__main__":
#創(chuàng)建游戲?qū)嵗⑦\(yùn)行游戲
ai = AlienInvasion()
ai.run_game()
到了這里,關(guān)于Python 中出現(xiàn)AttributeError: ‘Event‘ object has no attribute ‘key‘的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!