中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

小學課后服務 Python少兒編程 進階篇:12-飛機大戰3 課件 (16張PPT)

資源下載
  1. 二一教育資源

小學課后服務 Python少兒編程 進階篇:12-飛機大戰3 課件 (16張PPT)

資源簡介

(共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.speedx
self.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_sprites
for i in range(8):
met = Meteorite()
all_sprites.add(met)
這段代碼創建了一個精靈組,并將飛機精靈和創建的8個隕石精靈都添加到了精靈組中
1
2
在死循環中,調用精靈組的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 = y
self.rect.centerx = x
# 設置子彈的速度,子彈是從下往上的,所以為負
self.speedy = -10
1
在飛機精靈類中添加發射子彈的方法
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()
總結
Summary
Pygame精靈類

Pygame精靈組的使用

Thanks!

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 丹巴县| 平和县| 邵阳市| 乡宁县| 南和县| 慈溪市| 尤溪县| 许昌县| 郧西县| 巴彦淖尔市| 衡南县| 星子县| 丰县| 东港市| 萨嘎县| 龙口市| 甘德县| 登封市| 巢湖市| 凤城市| 郁南县| 和政县| 车致| 灯塔市| 铁力市| 宝应县| 敦化市| 云阳县| 新化县| 邹平县| 太湖县| 房山区| 宁陕县| 衡阳市| 常熟市| 长寿区| 银川市| 遵化市| 太仆寺旗| 宁化县| 吉水县|