隨便寫的做耐久小教程——(2)基本Object要素

本教程是基于umbrella丶2修改果引擎制作的耐久引擎(稍加改動)的教程,該引擎gm版本為Gamemaker8。
1.GML中較為特殊的一些語法
GML中無需輸入分號作為一行結(jié)尾,筆者懶,所以之后的代碼示例都不會有分號
A.repeat(){}
顧名思義,repeat的意義就是執(zhí)行相當(dāng)于括號中數(shù)值次數(shù)的代碼(可省略大括號,即執(zhí)行在repeat后的第一條代碼),例如:
a=0
repeat(10){
????a+=1
}
那么運(yùn)行完之后,a的值就會變?yōu)?0
B.with(){}
with代表讓括號中的obj執(zhí)行相應(yīng)代碼,例如:
with(ObjectSample){
????a=1
}
那么運(yùn)行完之后,ObjectSample中存儲的變量a值就會變?yōu)?
注:在with的括號中還可以填入all(所有object)或者某個obj的id
2.GM8中變量的特點(diǎn)
變量分為全局變量,普通變量,臨時變量,全局變量和臨時變量使用頻率不高,因此此處僅對普通變量進(jìn)行介紹。
GML的特色之一是每個obj都能夠存儲一些變量,并且各個obj間的變量互不干擾,也就是說,一個obj的變量a=0,如果在另一個obj中執(zhí)行a=1的代碼,第一個彈幕的變量a依然等于0
此外,該引擎能夠設(shè)置每個變量默認(rèn)為0,因此在某些情況下無需特地在使用變量前進(jìn)行賦值。
改變一個obj的變量具有以下兩種方式:
A.直接更改
variable=xxx
B.間接更改
with(ObjectSample)a=1
或
ObjectSample.a=1
3.創(chuàng)建Object
GML中創(chuàng)建obj的函數(shù)為:

可以通過以下幾種方式使用:
A.僅在對應(yīng)坐標(biāo)(x,y)創(chuàng)建obj
instance_create(x,y,obj)
B.在創(chuàng)建obj的同時,為inst賦值,其值等于創(chuàng)建的obj的id
inst=instance_create(x,y,obj)
C.在創(chuàng)建obj的同時,讓obj執(zhí)行一次代碼
with(instance_create(x,y,obj)){
????……
}
4.設(shè)置速度,方向
一個obj本身具有自帶的速度屬性speed和方向?qū)傩詃irection(角度制,右為0,逆時針增大),通過設(shè)定可以讓obj朝著某個方向移動,例如在create事件中輸入代碼:
speed=10
direction=270
這個obj就會在創(chuàng)建后豎直向下以10像素每幀的速度移動

5.設(shè)置圖像參數(shù)(透明度,拉伸倍數(shù)等)
一個obj的圖像的參數(shù)有很多,其中最重要的有以下幾種:
image_alpha:透明度,0為完全透明,1為完全不透明
image_angle:圖像繞中心旋轉(zhuǎn)角度,角度制,逆時針旋轉(zhuǎn)
image_xscale:長方向拉伸的倍數(shù)
image_yscale:高方向拉伸的倍數(shù)
具體效果可以自行在創(chuàng)建事件中輸入代碼,運(yùn)行游戲測試

6.銷毀Object
GML中銷毀obj的函數(shù)為:

執(zhí)行后obj會銷毀(如果有銷毀事件,會在銷毀的同時執(zhí)行其中代碼)

通常情況下,為了節(jié)省運(yùn)算資源,彈幕obj離開房間或者存在一段時間后應(yīng)當(dāng)進(jìn)行銷毀,一般銷毀有這兩種形式:
A.離開房間后銷毀
通過判斷坐標(biāo)位置,如在step事件中輸入:
if bbox_right<0 or?bbox_left>800 or bbox_bottom<0 or bbox_top>608{
????instance_destroy()
}
那么這個obj就會在離開房間時銷毀
注:通常情況下,iw房間大小為800×608
B.一定時間后銷毀
通過在obj中設(shè)定一個時間變量,如在step事件中輸入:
Time+=1
if Time=50 instance_destroy()
那么這個obj就會在50幀后銷毀
注:一般iw的幀率是50,也就是50幀相當(dāng)于1秒
7.時間軸
時間軸是耐久最重要的部分,這個引擎已經(jīng)設(shè)置好了時間軸的基本參數(shù),因此你只需要將所需代碼填入對應(yīng)的時間節(jié)點(diǎn),不需要學(xué)習(xí)時間軸相關(guān)的函數(shù)。

在時間軸界面的左側(cè),有這樣四個按鈕:

其中,添加是在時間軸中添加某個時間節(jié)點(diǎn),在此時間節(jié)點(diǎn)添加代碼的方式與在obj事件添加代碼的方式類似。
其他七個按鈕含義顯然,此處不做解釋。
注:步為0的時間節(jié)點(diǎn)必須保留
在游戲運(yùn)行的過程中,左上角有這樣一列數(shù)字:

其中各個數(shù)的含義為:
curStep:時間軸對應(yīng)的時刻。
IsPlaying:歌曲是否正在播放。
nums:該房間里存在的obj總數(shù)。(注:當(dāng)nums超過1000時,應(yīng)當(dāng)注意檢查是否有沒有銷毀的無用obj,正常情況下,nums大于1000之后有可能會出現(xiàn)明顯的卡頓現(xiàn)象)
X,Y:kid的坐標(biāo)
FPS:此刻的幀率/理論幀率
第二行數(shù)值:時間軸時刻轉(zhuǎn)換為運(yùn)行幀數(shù)
第三行數(shù)值:按下空格后,顯示按下時刻的運(yùn)行幀數(shù)/時間軸對應(yīng)的時刻,用于定位時間
8.在耐久中創(chuàng)建彈幕的簡單示例
1.按照第一章所述設(shè)計(jì)好引擎參數(shù)
2.創(chuàng)建一個obj,名字設(shè)置為Bullet,Parent設(shè)置為playerKiller
圖像設(shè)置為sprCherry(在cherry文件夾里)

3.添加一個創(chuàng)建事件,并在創(chuàng)建事件中設(shè)定基本參數(shù)

4.添加一個步事件,并在步事件中設(shè)置銷毀代碼

5.在時間軸中添加一個時刻

6.在時刻事件中添加創(chuàng)建obj的代碼

7.運(yùn)行游戲測試

下一章將介紹如何制作基本類型的彈幕