<Python編程>外星人入侵游戲練習(xí)踩的坑

<Python編程>

外星人入侵游戲編程練習(xí)

1.鍵盤(pán)不動(dòng)事件

找了半天,找不到鍵盤(pán)按下,飛船不動(dòng)是什么原因,然后仔細(xì)對(duì)照自己的代碼和書(shū)上的代碼,發(fā)現(xiàn)事件監(jiān)聽(tīng)錯(cuò)誤,如下:

game_functions:

import sys

import pygame

def check_events(ship):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.event == pygame.K_RIGHT:
                # ship.rect.centerx += 100
                ship.moving_right = True
            elif event.event == pygame.K_LEFT:
                ship.moving_left = True
        elif event.type == pygame.KEYUP:
            if event.event == pygame.K_RIGHT:
                ship.moving_right = False
            elif event.event == pygame.K_LEFT:
                ship.moving_left = False
def update_screen(ai_settings, screen, ship):
    screen.fill(ai_settings.bg_color)
    ship.blitme()
    pygame.display.flip()

錯(cuò)誤原因分析:

在pygame中,鍵盤(pán)是否按下監(jiān)聽(tīng)事件是通過(guò) event.type 事件;

而具體按鍵事件是要通過(guò) event.key事件;

并且在重構(gòu)ship類(lèi)代碼時(shí)也犯了錯(cuò)誤:

下面代碼時(shí)正確的,之前犯的錯(cuò)誤是在update()方法中,更新的仍是rect屬性,而不是新加的center屬性.

import pygame

class Ship():

    def __init__(self, ai_settings, screen):
        #初始化飛船位置
        self.screen = screen
        self.ai_settings = ai_settings

        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom

        self.center = float(self.rect.centerx)

        self.moving_right = False
        self.moving_left = False

    def update(self):
        if self.moving_right:
            self.center += self.ai_settings.ship_speed_factor
        elif self.moving_left:
            self.center -= self.ai_settings.ship_speed_factor
        self.rect.centerx = self.center

    def blitme(self):
        self.screen.blit(self.image, self.rect)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過(guò)事件實(shí)現(xiàn)的。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,691評(píng)論 1 11
  • 總體目錄 1.1、項(xiàng)目準(zhǔn)備 1.2、使用 pygame 創(chuàng)建圖形窗口 1.3、理解 圖像 并實(shí)現(xiàn)圖像繪制 1.4...
    IIronMan閱讀 6,550評(píng)論 2 19
  • 這次呢,讓我們重溫一下兒時(shí)的樂(lè)趣,用Python做一個(gè)飛機(jī)大戰(zhàn)的小游戲。接下來(lái),讓我們一起走進(jìn)“飛機(jī)大戰(zhàn)”。 一....
    HDhandi閱讀 1,982評(píng)論 1 4
  • 今天看到一篇就媒體對(duì)名人死亡事件追蹤、報(bào)道方式的評(píng)論文章,標(biāo)題是《沉默是罪大的善意》。寫(xiě)的挺好,不過(guò)看完我卻很想對(duì)...
    入定閱讀 211評(píng)論 0 0
  • 你有一個(gè)人去電影院看電影過(guò)嗎? 我以前總覺(jué)得一個(gè)人去電影院看電影是多么了不得的事情。我是喜歡看電影的,特別...
    南方樹(shù)閱讀 1,284評(píng)論 1 3

友情鏈接更多精彩內(nèi)容