角色的跳躍是很多游戲中的基礎(chǔ)動(dòng)作,下面我們一起來研究怎么做出一個(gè)比較完善的跳躍小游戲來。
跳躍的方法有很多種,最簡單的是勻速上下移動(dòng),程序如圖2、圖3。
以上兩種方法,角色都是在原位置上下勻速移動(dòng),在起點(diǎn)和最高點(diǎn)不變的情況下,可以修改積木塊中的滑行時(shí)間或者重復(fù)執(zhí)行次數(shù)來改變其運(yùn)行速度。這兩段程序非常簡單,但有一些問題:一是跳躍是勻速的,不符合生活常識(shí)和物理規(guī)律——越接近最高點(diǎn)速度越慢;二是起點(diǎn)和落點(diǎn)是同一水平面,不適合地面高低不平的情況。
我們生活中感受到跳躍是會(huì)受到重力影響的。起跳時(shí)最快上升到最高點(diǎn)時(shí)速度為零下降時(shí)加速,為了游戲手感考慮下降速度一般有一個(gè)最高值。為了實(shí)現(xiàn)這種效果我們引入變量“垂直速度”(設(shè)為15),按下起跳鍵(空格)時(shí)做循環(huán):Y坐標(biāo)每次增加一個(gè)垂直速度,垂直速度不斷減1,這樣Y坐標(biāo)將從增加15、14、13……到減少-1、-2、-3……-8。這樣角色將快速上升在接近最高點(diǎn)開始減速,再加速下落,由于還沒有設(shè)置地面?zhèn)蓽y所以會(huì)一直下落直到屏幕邊緣。
為了避免角色的下降速度太快穿越地面影響地面?zhèn)蓽y,我們對(duì)垂直速度的最小值進(jìn)行了限制為-8。
如圖就是常見的跳躍方法,根據(jù)需要的跳躍高度調(diào)整垂直速度,做成自制積木便于后續(xù)編輯。如圖4
完成跳躍的基本設(shè)置后接下來我們介紹幾種偵測地面的方法。如果沒有地面?zhèn)蓽y,角色在重力效果下會(huì)持續(xù)下落。我們設(shè)置一個(gè)基準(zhǔn)面Y坐標(biāo)等于-160。當(dāng)角色的Y坐標(biāo)高于-160時(shí),它的垂直移動(dòng)速度可以一直減少。當(dāng)角色的Y坐標(biāo)小于-160時(shí)我們認(rèn)為角色跌落到陷阱中了游戲失敗。設(shè)置垂直速度為0,并結(jié)束游戲。用坐標(biāo)的方法偵測地面只能適合地面是同一水平線,不適合用于階梯地形。如圖5
我們可以通過對(duì)地面顏色的偵測作為判斷條件。當(dāng)角色碰觸到某種顏色時(shí)我們認(rèn)為它碰到了地面,此時(shí)讓其停止。相比于坐標(biāo)判斷顏色判定,地面可以高低不平但作為地面的顏色必須統(tǒng)一,而且起跳后頭部碰觸地面下方時(shí)可能會(huì)遇到侵入地板或從下方向上穿透地板的Bug。如圖6
我們也可以用角色來判斷地面,之前的程序由于有重力效果的影響本應(yīng)靜止站在地上的角色會(huì)在地面上不停抖動(dòng)。這里告訴你一個(gè)小技巧,角色在碰到地板后速度歸0,之后再回升1個(gè)坐標(biāo)離開地面。這樣雖然視覺看起來角色站在地面上實(shí)際上是懸浮在地面上的,這樣就不會(huì)重復(fù)進(jìn)行地面判斷了。
為了確定按空格時(shí)角色是在地面上起跳,要先將角色Y坐標(biāo)-1,進(jìn)行地面判斷,如果碰到了地面才執(zhí)行起跳。如圖7、圖8
不少游戲里面都有二段跳,我們對(duì)程序稍微修改就可以實(shí)現(xiàn)在空中跳躍次數(shù)的限定。添加次數(shù)變量,每次跳躍增加一次計(jì)數(shù),只有次數(shù)小于等于2的情況下才起跳,落回地面后次數(shù)歸零。還需要在添加一個(gè)等待空格鍵彈起的判斷,這樣才能正確地計(jì)數(shù)。如圖9
角色左右移動(dòng)就比較簡單,按左鍵X坐標(biāo)增加X速度,按右鍵X坐標(biāo)減少X速度。通過顏色或角色判斷遇到阻礙物時(shí)X坐標(biāo)退回X速度。為了保證上下運(yùn)動(dòng)和左右移動(dòng)互不干擾,設(shè)定兩個(gè)點(diǎn)擊綠旗循環(huán)這樣操作手感更好。如圖10、圖11