資源簡介 (共16張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.少兒編程課飛機大戰3本節我們來繼續完善這個小游戲,增加隕石掉落和發射子彈等功能隕石精靈的添加和飛機精靈一樣,我們同樣通過精靈類來創建隕石精靈1創建隕石精靈類、定義初始化方法2設定隕石隨機出現的位置這里先使用紅色方塊代替隕石# 隕石精靈class Meteorite(pygame.sprite.Sprite):def __init__(self):# 初始化pygame.sprite.Sprite.__init__(self)# 定義隕石的圖形self.image = pygame.Surface((30, 40))# 定義隕石的顏色為紅色self.image.fill((255, 0, 0))# 獲取隕石的長方形self.rect = self.image.get_rect()# 設置隕石出現的x軸坐標:隨機出現在0~屏幕寬度‐隕石本身寬度的位置self.rect.x = random.randrange(WIDTH - self.rect.width)# y軸坐標self.rect.y = random.randrange(-100, -40)3設定隕石的飛行速度self.speedy = random.randrange(1, 8)# x軸速度self.speedx = random.randrange(-3, 3)4增加update方法,指定隕石運行規則def update(self):self.rect.x += self.speedxself.rect.y += self.speedy隕石精靈編寫完成之后,添加到精靈組,這里為什么要使用精靈組呢?只有一個飛機精靈時,我們調用它的update方法并畫到屏幕需要這樣做而如果有很100個飛機精靈,同時還有很多隕石精靈,那么……統一渲染統一更新update如果我們使用精靈組player.update()screen.blit(player.image, player.rect)如果有三個飛機精靈精靈組player.update()screen.blit(player.image, player.rect)player.update()screen.blit(player.image, player.rect)player.update()screen.blit(player.image, player.rect)將創建好的精靈添加到精靈組之后,我們就可以:現在我們就創建全部精靈組,統一管理飛機和隕石定義全部精靈組,加入飛機與隕石# 定義玩家飛機對象player = Player()# 定義全部精靈組all_sprites = pygame.sprite.Group()# 將飛機加入精靈組all_sprites.add(player)# 定義8個隕石并加入到精靈組all_spritesfor i in range(8):met = Meteorite()all_sprites.add(met)這段代碼創建了一個精靈組,并將飛機精靈和創建的8個隕石精靈都添加到了精靈組中12在死循環中,調用精靈組的update方法all_sprites.update()all_sprites.draw(screen)3將所有精靈繪制到屏幕中使用精靈組之后,不需要去調用每一個精靈update方法,也不必把每一個精靈都blit到屏幕上,只需要對精靈組進行操作就可以統一管理。運行程序,觀察隕石掉落效果:觀察效果可以看到,隕石只出現了8個,過后不在生成新的隕石,如何讓隕石一直產生呢?1在隕石掉落出屏幕之后,使其回到初始位置即可2在update方法中增加如下判斷if self.rect.top > HEIGHT + 10 or self.rect.left < -30 or self.rect.right > WIDTH + 30:self.rect.x = random.randrange(WIDTH - self.rect.width)self.rect.y = random.randrange(-100, -40)運行程序,隕石雨效果如下:子彈精靈的添加1創建子彈精靈類,定義初始化方法飛機和隕石群的效果都已制作完成,現在為飛機添加發射子彈的功能2設置子彈的位置為傳入的x和y、設置子彈移動速度# 子彈class Bullet(pygame.sprite.Sprite):def __init__(self, x, y):pygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((10, 20))self.image.fill((255, 255, 0))self.rect = self.image.get_rect()self.rect.bottom = yself.rect.centerx = x# 設置子彈的速度,子彈是從下往上的,所以為負self.speedy = -101在飛機精靈類中添加發射子彈的方法3添加update方法,使子彈移動飛機和隕石群的效果都已制作完成,現在為飛機添加發射子彈的功能2在死循環的事件中設置子彈發射的時機,例如按下空格鍵時def update(self):self.rect.y += self.speedy# 添加射擊的功能def shoot(self):# 定義子彈bullet = Bullet(self.rect.centerx, self.rect.top)# 將子彈加入全部精靈組和子彈精靈組all_sprites.add(bullet)發射子彈是飛機的行為,所以在飛機精靈類中定義射擊功能。if event.key == pygame.K_SPACE:player.shoot()該方法首先產生一顆子彈,然后將子彈加入精靈組。在死循環中由于調用了all_sprites的update方法,子彈就會自動運行。效果演示與移動出屏幕外的子彈處理2運行程序,按空格鍵1為了節省內存,在子彈的update方法中添加刪除功能if self.rect.bottom < 0:self.kill()總結SummaryPygame精靈類√Pygame精靈組的使用√Thanks! 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫