小學(xué)課后服務(wù) Python少兒編程 進階篇:11-飛機大戰(zhàn)2 課件_第1頁
小學(xué)課后服務(wù) Python少兒編程 進階篇:11-飛機大戰(zhàn)2 課件_第2頁
小學(xué)課后服務(wù) Python少兒編程 進階篇:11-飛機大戰(zhàn)2 課件_第3頁
小學(xué)課后服務(wù) Python少兒編程 進階篇:11-飛機大戰(zhàn)2 課件_第4頁
小學(xué)課后服務(wù) Python少兒編程 進階篇:11-飛機大戰(zhàn)2 課件_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少兒編程課飛機大戰(zhàn)2本節(jié)我們來使用另一種方式繪制小方塊,并使其能夠在屏幕中左右移動Pygame中的精靈除了繪制飛機,還可以通過創(chuàng)建精靈的方式來生成飛機1精靈是游戲開發(fā)中的術(shù)語。簡單來說,游戲中會動的東西都叫精靈飛機隕石子彈飛機大戰(zhàn)中的精靈2對于本游戲來說,目前有以下幾種精靈使用精靈類來制作角色,會更加有利于對角色的管理以及功能的添加Pygame中提供了精靈類,繼承它就可以定義自己的精靈,下面我們定義飛機精靈12定義飛機精靈類Player,定義初始化方法為了方便確定創(chuàng)建出的正方形的位置,設(shè)置一下它的中心和底的值,classPlayer(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()

#設(shè)置長方形中心的x的值

self.rect.centerx=WIDTH/2

#設(shè)置長方形底的值

self.rect.bottom=HEIGHT-10通過設(shè)置rect的centerx值和bottom值,就能確定長方形所在的位置了。這里將image屬性設(shè)置為方塊,那么飛機的表現(xiàn)形式就是一個方塊。飛機精靈類定義完成之后,畫到屏幕中12添加黃色部分代碼—創(chuàng)建player對象,并繪制到屏幕#定義玩家飛機對象

player=Player()

running=True

whilerunning:

foreventinpygame.event.get():

ifevent.type==pygame.QUIT:

#結(jié)束游戲

running=False

elifevent.type==pygame.KEYDOWN:

ifevent.key==pygame.K_ESCAPE:

#結(jié)束游戲

running=False

#將玩家飛機繪制到屏幕上

screen.blit(player.image,player.rect)

#重繪游戲界面,相當(dāng)于刷新一次

pygame.display.flip()

pygame.quit運行程序,可以看到屏幕中同樣出現(xiàn)了綠色小方塊繪制到屏幕時,不需要指定位置,直接傳入player.rect即可飛機左右移動接下來我們讓飛機能夠移動,首先來分析(0,0)600480(0,600)(480,0)(480,600)X軸Y軸左右移動,改變的是角色的X坐標(biāo)當(dāng)按下左移鍵240200160120280320360X坐標(biāo)減少當(dāng)按下右移鍵X坐標(biāo)增加然后設(shè)置角色的X軸坐標(biāo)為當(dāng)前坐標(biāo)加上這個變量,在死循環(huán)中不斷的更新位置就可以了所以我們可以創(chuàng)建一個初始值為0,按下左鍵時設(shè)為負(fù)值、按下右鍵時設(shè)為正值的變量在player類中增加update方法,更新飛機的位置1在首先初始化X軸速度并獲得按鍵狀態(tài)2根據(jù)不同按鍵,將X軸速度設(shè)為不同值defupdate(self):

self.speedx=0

#獲取按鍵狀態(tài)

keys=pygame.key.get_pressed()

#如果左移鍵被按下

ifkeys[pygame.K_LEFT]:

#x軸上的速度設(shè)置為‐8

self.speedx=-8

#如果右鍵被按下

ifkeys[pygame.K_RIGHT]:

#x軸上的速度設(shè)置為8

self.speedx=8

#設(shè)置角色的x軸坐標(biāo)

self.rect.x+=self.speedx3最后,將角色的位置設(shè)置為當(dāng)前坐標(biāo)加上按鍵之后的速度在死循環(huán)中調(diào)用update方法,然后運行程序,結(jié)果如下:這是因為在每次繪制飛機時,并沒有繪制屏幕,導(dǎo)致繪制飛機后的界面又重新做了屏幕要解決這個問題,只需要每次繪制飛機的時候也繪制背景即可,繪制背景只需要給一個背景顏色??梢钥吹剑聊幌路匠霈F(xiàn)了一塊綠色區(qū)域,這顯然不是我們想要的移動效果。為屏幕添加背景色再次運行#繪制屏幕的背景顏色

screen.fill((0,0,0))現(xiàn)在飛機雖然可以移動,但是非常不合理,不僅移動的速度非??欤夷軌蛞瞥銎聊唤酉聛?,我們對飛機的移動進行設(shè)置,使其移動更加合理飛機移動合理性首先解決飛機能夠移出屏幕的問題1更新update方法,設(shè)置邊界限制2運行程序,飛機只能在屏幕中移動#邊緣檢測,如果碰到邊緣,就停止不動

ifself.rect.right>WIDTH:

self.rect.right=WIDTH

ifself.rect.left<0:

self.rect.left=0

當(dāng)飛機的右邊緣即將超出屏幕右邊緣坐標(biāo)時,將飛機右邊緣坐標(biāo)設(shè)為屏幕右邊緣坐標(biāo),左側(cè)限制同理。邊緣限制寫好之后,來看一下飛機的移動速度非??斓脑蛭覀冎?,電腦的運行速度是非常快的,當(dāng)我們按下按鍵時,死循環(huán)已經(jīng)執(zhí)行了很多次已運行了五次為例:8像素8像素8像素8像素8像素8像素執(zhí)行一次,移動像素執(zhí)行五次,移動5x8也就是40像素實際程序的執(zhí)行速度更加快,所以看起來飛機移動的非??熘涝蛑缶鸵朕k法解決,這里有兩種方法:第一種是修改左右移動的像素數(shù),減慢飛機運動速度第二種方式在游戲中更常見:控制游戲的節(jié)奏!這里我們使用pygame中的定時器來控制游戲節(jié)奏1初始化計時器2定義一個常量并在死循環(huán)中設(shè)定循環(huán)執(zhí)行的時間#初始化計時器

clock=pygame.time.Clock()FPS=60

clock.tick(FPS)注意:這里的60并不是設(shè)定的循環(huán)執(zhí)行的時間,而是每秒循環(huán)執(zhí)行的次數(shù),1秒等于1000毫秒,所有每次循環(huán)的執(zhí)行時間就是1000/60=16.66約等于17毫秒。3使用time模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論