資源簡介 (共19張PPT)Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.少兒編程課飛機大戰2本節我們來使用另一種方式繪制小方塊,并使其能夠在屏幕中左右移動Pygame中的精靈除了繪制飛機,還可以通過創建精靈的方式來生成飛機1精靈是游戲開發中的術語。簡單來說,游戲中會動的東西都叫精靈飛機隕石子彈飛機大戰中的精靈2對于本游戲來說,目前有以下幾種精靈使用精靈類來制作角色,會更加有利于對角色的管理以及功能的添加Pygame中提供了精靈類,繼承它就可以定義自己的精靈,下面我們定義飛機精靈12定義飛機精靈類Player,定義初始化方法為了方便確定創建出的正方形的位置,設置一下它的中心和底的值,class Player(pygame.sprite.Sprite):def __init__(self):# 完成精靈的初始化pygame.sprite.Sprite.__init__(self)# 初始化飛機精靈的圖像,也就是長什么樣self.image = pygame.Surface((50, 50))# 初始化飛機精靈圖像的顏色self.image.fill((0, 255, 0))這里的get_rect能夠獲取飛機的圖像的長方形,也就是我們定義的長方形本身。# 角色的長方形self.rect = self.image.get_rect()# 設置長方形中心的x的值self.rect.centerx = WIDTH / 2# 設置長方形底的值self.rect.bottom = HEIGHT - 10通過設置rect的centerx值和bottom值,就能確定長方形所在的位置了。這里將image屬性設置為方塊,那么飛機的表現形式就是一個方塊。飛機精靈類定義完成之后,畫到屏幕中12添加黃色部分代碼—創建player對象,并繪制到屏幕# 定義玩家飛機對象player = Player()running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:# 結束游戲running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:# 結束游戲running = False# 將玩家飛機繪制到屏幕上screen.blit(player.image, player.rect)# 重繪游戲界面,相當于刷新一次pygame.display.flip()pygame.quit運行程序,可以看到屏幕中同樣出現了綠色小方塊繪制到屏幕時,不需要指定位置,直接傳入player.rect即可飛機左右移動接下來我們讓飛機能夠移動,首先來分析(0,0)600480(0,600)(480,0)(480,600)X軸Y軸左右移動,改變的是角色的X坐標當按下左移鍵240200160120280320360X坐標減少當按下右移鍵X坐標增加然后設置角色的X軸坐標為當前坐標加上這個變量,在死循環中不斷的更新位置就可以了所以我們可以創建一個初始值為0,按下左鍵時設為負值、按下右鍵時設為正值的變量在player類中增加update方法,更新飛機的位置1在首先初始化X軸速度并獲得按鍵狀態2根據不同按鍵,將X軸速度設為不同值def update(self):self.speedx = 0# 獲取按鍵狀態keys = pygame.key.get_pressed()# 如果左移鍵被按下if keys[pygame.K_LEFT]:# x軸上的速度設置為‐8self.speedx = -8# 如果右鍵被按下if keys[pygame.K_RIGHT]:# x軸上的速度設置為8self.speedx = 8# 設置角色的x軸坐標self.rect.x += self.speedx3最后,將角色的位置設置為當前坐標加上按鍵之后的速度在死循環中調用update方法,然后運行程序,結果如下:這是因為在每次繪制飛機時,并沒有繪制屏幕,導致繪制飛機后的界面又重新做了屏幕要解決這個問題,只需要每次繪制飛機的時候也繪制背景即可,繪制背景只需要給一個背景顏色。可以看到,屏幕下方出現了一塊綠色區域,這顯然不是我們想要的移動效果。為屏幕添加背景色再次運行# 繪制屏幕的背景顏色screen.fill((0, 0, 0))現在飛機雖然可以移動,但是非常不合理,不僅移動的速度非常快,而且能夠移出屏幕接下來,我們對飛機的移動進行設置,使其移動更加合理飛機移動合理性首先解決飛機能夠移出屏幕的問題1更新update方法,設置邊界限制2運行程序,飛機只能在屏幕中移動# 邊緣檢測,如果碰到邊緣,就停止不動if self.rect.right > WIDTH:self.rect.right = WIDTHif self.rect.left < 0:self.rect.left = 0當飛機的右邊緣即將超出屏幕右邊緣坐標時,將飛機右邊緣坐標設為屏幕右邊緣坐標,左側限制同理。邊緣限制寫好之后,來看一下飛機的移動速度非常快的原因我們知道,電腦的運行速度是非常快的,當我們按下按鍵時,死循環已經執行了很多次已運行了五次為例:8像素8像素8像素8像素8像素8像素執行一次,移動像素執行五次,移動5x8也就是40像素實際程序的執行速度更加快,所以看起來飛機移動的非常快知道原因之后就要想辦法解決,這里有兩種方法:第一種是修改左右移動的像素數,減慢飛機運動速度第二種方式在游戲中更常見:控制游戲的節奏!這里我們使用pygame中的定時器來控制游戲節奏1初始化計時器2定義一個常量并在死循環中設定循環執行的時間# 初始化計時器clock = pygame.time.Clock()FPS = 60clock.tick(FPS)注意:這里的60并不是設定的循環執行的時間,而是每秒循環執行的次數,1秒等于1000毫秒,所有每次循環的執行時間就是1000/60 = 16.66 約等于17毫秒。3使用time模塊,查看現在循環執行的時間可以發現,基本上是17毫秒的樣子import timet = time.time()# 輸出毫秒值print(int(round(t * 1000)))現在運行程序,飛機就可以合理的在屏幕中移動了總結SummaryPygame精靈類的使用√pygame游戲節奏的控制方式√Thanks! 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫