版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少兒編程課飛機(jī)大戰(zhàn)2本節(jié)我們來(lái)使用另一種方式繪制小方塊,并使其能夠在屏幕中左右移動(dòng)Pygame中的精靈除了繪制飛機(jī),還可以通過(guò)創(chuàng)建精靈的方式來(lái)生成飛機(jī)1精靈是游戲開(kāi)發(fā)中的術(shù)語(yǔ)。簡(jiǎn)單來(lái)說(shuō),游戲中會(huì)動(dòng)的東西都叫精靈飛機(jī)隕石子彈飛機(jī)大戰(zhàn)中的精靈2對(duì)于本游戲來(lái)說(shuō),目前有以下幾種精靈使用精靈類來(lái)制作角色,會(huì)更加有利于對(duì)角色的管理以及功能的添加Pygame中提供了精靈類,繼承它就可以定義自己的精靈,下面我們定義飛機(jī)精靈12定義飛機(jī)精靈類Player,定義初始化方法為了方便確定創(chuàng)建出的正方形的位置,設(shè)置一下它的中心和底的值,classPlayer(pygame.sprite.Sprite):
def__init__(self):
#完成精靈的初始化
pygame.sprite.Sprite.__init__(self)
#初始化飛機(jī)精靈的圖像,也就是長(zhǎng)什么樣
self.image=pygame.Surface((50,50))
#初始化飛機(jī)精靈圖像的顏色
self.image.fill((0,255,0))這里的get_rect能夠獲取飛機(jī)的圖像的長(zhǎng)方形,也就是我們定義的長(zhǎng)方形本身。
#角色的長(zhǎng)方形
self.rect=self.image.get_rect()
#設(shè)置長(zhǎng)方形中心的x的值
self.rect.centerx=WIDTH/2
#設(shè)置長(zhǎng)方形底的值
self.rect.bottom=HEIGHT-10通過(guò)設(shè)置rect的centerx值和bottom值,就能確定長(zhǎng)方形所在的位置了。這里將image屬性設(shè)置為方塊,那么飛機(jī)的表現(xiàn)形式就是一個(gè)方塊。飛機(jī)精靈類定義完成之后,畫(huà)到屏幕中12添加黃色部分代碼—?jiǎng)?chuàng)建player對(duì)象,并繪制到屏幕#定義玩家飛機(jī)對(duì)象
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
#將玩家飛機(jī)繪制到屏幕上
screen.blit(player.image,player.rect)
#重繪游戲界面,相當(dāng)于刷新一次
pygame.display.flip()
pygame.quit運(yùn)行程序,可以看到屏幕中同樣出現(xiàn)了綠色小方塊繪制到屏幕時(shí),不需要指定位置,直接傳入player.rect即可飛機(jī)左右移動(dòng)接下來(lái)我們讓飛機(jī)能夠移動(dòng),首先來(lái)分析(0,0)600480(0,600)(480,0)(480,600)X軸Y軸左右移動(dòng),改變的是角色的X坐標(biāo)當(dāng)按下左移鍵240200160120280320360X坐標(biāo)減少當(dāng)按下右移鍵X坐標(biāo)增加然后設(shè)置角色的X軸坐標(biāo)為當(dāng)前坐標(biāo)加上這個(gè)變量,在死循環(huán)中不斷的更新位置就可以了所以我們可以創(chuàng)建一個(gè)初始值為0,按下左鍵時(shí)設(shè)為負(fù)值、按下右鍵時(shí)設(shè)為正值的變量在player類中增加update方法,更新飛機(jī)的位置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方法,然后運(yùn)行程序,結(jié)果如下:這是因?yàn)樵诿看卫L制飛機(jī)時(shí),并沒(méi)有繪制屏幕,導(dǎo)致繪制飛機(jī)后的界面又重新做了屏幕要解決這個(gè)問(wèn)題,只需要每次繪制飛機(jī)的時(shí)候也繪制背景即可,繪制背景只需要給一個(gè)背景顏色??梢钥吹?,屏幕下方出現(xiàn)了一塊綠色區(qū)域,這顯然不是我們想要的移動(dòng)效果。為屏幕添加背景色再次運(yùn)行#繪制屏幕的背景顏色
screen.fill((0,0,0))現(xiàn)在飛機(jī)雖然可以移動(dòng),但是非常不合理,不僅移動(dòng)的速度非??欤夷軌蛞瞥銎聊唤酉聛?lái),我們對(duì)飛機(jī)的移動(dòng)進(jìn)行設(shè)置,使其移動(dòng)更加合理飛機(jī)移動(dòng)合理性首先解決飛機(jī)能夠移出屏幕的問(wèn)題1更新update方法,設(shè)置邊界限制2運(yùn)行程序,飛機(jī)只能在屏幕中移動(dòng)#邊緣檢測(cè),如果碰到邊緣,就停止不動(dòng)
ifself.rect.right>WIDTH:
self.rect.right=WIDTH
ifself.rect.left<0:
self.rect.left=0
當(dāng)飛機(jī)的右邊緣即將超出屏幕右邊緣坐標(biāo)時(shí),將飛機(jī)右邊緣坐標(biāo)設(shè)為屏幕右邊緣坐標(biāo),左側(cè)限制同理。邊緣限制寫(xiě)好之后,來(lái)看一下飛機(jī)的移動(dòng)速度非常快的原因我們知道,電腦的運(yùn)行速度是非常快的,當(dāng)我們按下按鍵時(shí),死循環(huán)已經(jīng)執(zhí)行了很多次已運(yùn)行了五次為例:8像素8像素8像素8像素8像素8像素執(zhí)行一次,移動(dòng)像素執(zhí)行五次,移動(dòng)5x8也就是40像素實(shí)際程序的執(zhí)行速度更加快,所以看起來(lái)飛機(jī)移動(dòng)的非常快知道原因之后就要想辦法解決,這里有兩種方法:第一種是修改左右移動(dòng)的像素?cái)?shù),減慢飛機(jī)運(yùn)動(dòng)速度第二種方式在游戲中更常見(jiàn):控制游戲的節(jié)奏!這里我們使用pygame中的定時(shí)器來(lái)控制游戲節(jié)奏1初始化計(jì)時(shí)器2定義一個(gè)常量并在死循環(huán)中設(shè)定循環(huán)執(zhí)行的時(shí)間#初始化計(jì)時(shí)器
clock=pygame.time.Clock()FPS=60
clock.tick(FPS)注意:這里的60并不是設(shè)定的循環(huán)執(zhí)行的時(shí)間,而是每秒循環(huán)執(zhí)行的次數(shù),1秒等于1000毫秒,所有每次循環(huán)的執(zhí)行時(shí)間就是1000/60=16.66約等于17毫秒。3使用time模
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年三方抵押合同模板(2篇)
- 圓珠筆散件行業(yè)深度研究報(bào)告
- 民間房屋買賣合同
- 會(huì)議室改造可行性研究報(bào)告
- 2025年專業(yè)版公司之間的借款合同模板(三篇)
- 民宿租賃合同
- 新型保溫材料新建項(xiàng)目可行性研究報(bào)告建議書(shū)申請(qǐng)格式范文
- 2025年上海市二手機(jī)動(dòng)車購(gòu)買合同樣本(2篇)
- 中國(guó)自由式虎鉗項(xiàng)目投資可行性研究報(bào)告
- 滑雪杖行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及趨勢(shì)與投資分析研究報(bào)告
- 2024年09月2024興業(yè)銀行總行崗測(cè)評(píng)筆試歷年參考題庫(kù)附帶答案詳解
- 山東省煙臺(tái)市招遠(yuǎn)市2024-2025學(xué)年九年級(jí)上學(xué)期期末考試英語(yǔ)(筆試)試題(含答案)
- 駱駝祥子讀書(shū)筆記一至二十四章
- 2025年方大萍安鋼鐵招聘筆試參考題庫(kù)含答案解析
- 2024年醫(yī)師定期考核臨床類考試題庫(kù)及答案(共500題)
- 2025年電力工程施工企業(yè)發(fā)展戰(zhàn)略和經(jīng)營(yíng)計(jì)劃
- 2022年公務(wù)員多省聯(lián)考《申論》真題(安徽C卷)及答案解析
- 大型活動(dòng)保安培訓(xùn)
- 2024年大學(xué)本科課程教育心理學(xué)教案(全冊(cè)完整版)
- 信息系統(tǒng)運(yùn)維服務(wù)類合同6篇
- 江蘇省七市2025屆高三最后一卷物理試卷含解析
評(píng)論
0/150
提交評(píng)論