自制小球淘汰賽教程(三)自定義變量
自定義變量有很多用途,比如傳送門(mén)傳了幾個(gè)小球后自動(dòng)消失,小球的分?jǐn)?shù)等,都可以用自定義變量實(shí)現(xiàn)。
我現(xiàn)在講的都是原理,后面會(huì)直接給出實(shí)際例子,實(shí)在看不懂原理的就等后面抄代碼吧……
真的想做好原創(chuàng)球賽up,還是建議搞清楚原理,單純復(fù)制別人的代碼適合自?shī)首詷?lè)。
一、物體本身的變量。
右鍵打開(kāi)物體的script腳本選單,左上角有一個(gè)黑色的長(zhǎng)方形文本框,在這里就可以輸入自定義變量。

怎么自定義變量呢?
比如,我想給小球增加一個(gè)“血量”,那么,在這個(gè)文本框輸入
_HP = 100 (創(chuàng)建變量也可以輸入_HP := 100,一般情況沒(méi)啥區(qū)別,需要區(qū)別時(shí)再說(shuō)明)
再按回車(chē)鍵。
然后,你就會(huì)發(fā)現(xiàn),下面就多出來(lái)了一個(gè)名為“_HP”的屬性。

名字隨便取,你也可以寫(xiě)其他英文/數(shù)字/下劃線組合,_life,_XueLiang,_name5,隨便起名,只要不跟已有的重復(fù)就行。
這個(gè)變量只對(duì)這個(gè)物體本身生效。
如果重復(fù)取名,會(huì)發(fā)生什么呢?
比如,現(xiàn)在已經(jīng)有了_HP這個(gè)變量,如果我再在文本框輸入_HP = 200并按回車(chē)鍵,那么就會(huì)發(fā)現(xiàn)下面的_HP = 右邊也變成了200。
這些變量名稱(chēng)是按照英文字母順序排列的,先排大寫(xiě)字母A到Z,然后下劃線,最后小寫(xiě)字母a到z。
在實(shí)際使用中,變量名稱(chēng)如果只是大小寫(xiě)不同,那么就被視為同一個(gè)變量。
比如已有_HP的情況下,你再輸入_hP = 300,_Hp =114,_hp = 999,并不會(huì)再創(chuàng)建新的變量,而是改變_HP的數(shù)值。
注意:
有下劃線前綴的自定義變量,會(huì)永久保存,比如 _HP,_score。
沒(méi)有加下劃線的自定義變量,關(guān)掉場(chǎng)景時(shí)就會(huì)消失,比如HP,score。
所以想要永久保存的話,請(qǐng)一定記得加上下劃線。
自定義變量本身只是一個(gè)數(shù)值,沒(méi)有其他效果。
這個(gè)自定義變量怎么使用,看你自己。
比如我要把_HP當(dāng)做小球的分?jǐn)?shù)來(lái)使用,我在場(chǎng)上設(shè)置各種傳送門(mén),碰到一次就扣1分,那么在那個(gè)傳送門(mén)的oncollide里加上
e.other._hp = e.other._hp - 1
就能實(shí)現(xiàn)積分賽里面的扣一分效果。
又或者,我要把_HP當(dāng)做傳送門(mén)的血量,只讓49個(gè)球通過(guò),49個(gè)球過(guò)去后,傳送門(mén)就自動(dòng)消失,那么就可以給傳送門(mén)添加自定義變量 _HP = 49,并在oncollide里寫(xiě)
(e) = > {
??e.other.pos = [xx,yy];
??_HP = _HP -1
}
poststep里寫(xiě)
(e) = > {
??_HP <=0 ? {
????Timetolive = 0
}:{}
}
這樣,這個(gè)傳送門(mén)的初始HP是49,每傳送一次HP就減一。隨時(shí)判斷HP是否小于等于0,如果已經(jīng)小于等于0,立刻把傳送門(mén)的存活倒計(jì)時(shí)改成0,立刻消失。
自定義變量不一定是數(shù)字,還可以是:
數(shù)組 ???[1,2,3],[15,36]
布爾變量 ??true或者false
字符串(文本),必須加上引號(hào) ??”矢車(chē)菊”? ”大青亡了”? “l(fā)ime”
二、場(chǎng)景變量
場(chǎng)景變量的創(chuàng)建、使用方法跟物體本身的變量一模一樣。
兩者的區(qū)別就是:
物體本身的變量,在哪里創(chuàng)建的,就只適用于那個(gè)物體本身。
場(chǎng)景變量,隨便你在哪里創(chuàng)建,都是這張圖共用的。
至于場(chǎng)景變量的格式,很簡(jiǎn)單,就是創(chuàng)建物體本身變量的方法,只不過(guò)你得在名字前加上scene.my.
比如scene.my.hp = 100,scene.my.spots1 = 49
場(chǎng)景變量,關(guān)掉algodoo后不會(huì)消失,不用必須加下劃線。
那么,說(shuō)一下場(chǎng)景變量的使用實(shí)例。
還是以自動(dòng)消失的傳送門(mén)為例。
假如我在第一關(guān)畫(huà)了3個(gè)傳送門(mén),我想讓這三個(gè)傳送門(mén)血量共用,三個(gè)傳送門(mén)總共只能傳送49個(gè)球,就可以使用場(chǎng)景變量了。
把前面物體變量例子的_HP,全部改成scene.my.hp即可。
即隨便在某個(gè)script腳本選單里輸入scene.my.hp = 49,
然后三個(gè)傳送門(mén)oncollide里都寫(xiě)
(e) = > {
??e.other.pos = [xx,yy];
??scene.my.hp = scene.my.hp -1
}
poststep里寫(xiě)
(e) = > {
??scene.my.hp <=0 ? {
????Timetolive = 0
}:{}
}
第二關(guān)的傳送門(mén)血量想設(shè)置成48,那再創(chuàng)建個(gè)場(chǎng)景變量scene.my.hp2 = 48,其他如法炮制即可。
同理,第三關(guān)傳送門(mén)scene.my.hp3 = 47
第四關(guān)傳送門(mén)scene.my.hp4= 46
……
在我發(fā)布的50球淘汰賽模板里,我每關(guān)酸橙色的過(guò)關(guān)傳送門(mén),血量都是以scene.my.spots的格式創(chuàng)建的場(chǎng)景變量。
第一關(guān)是scene.my.spots1
第二關(guān)是scene.my.spots2
……
這樣,給功能類(lèi)似的一系列變量起名時(shí),加個(gè)數(shù)字編號(hào),更方便識(shí)別。當(dāng)然,你也可以隨便取名,只不過(guò)變量創(chuàng)建太多了,可能會(huì)忘掉每個(gè)變量是干什么的。
場(chǎng)景變量還有另外一種創(chuàng)建方法:
按下鍵盤(pán)上的~鍵(左上角數(shù)字1旁邊的那個(gè)),就會(huì)打開(kāi)控制臺(tái)。(不推薦新手使用控制臺(tái))

在控制臺(tái)也可以輸入scene.my.hp = 49,以此創(chuàng)建場(chǎng)景變量。
注意:如果你在控制臺(tái)創(chuàng)建變量時(shí)不加scene.my.,而是直接寫(xiě)hp = 49,這叫做全局變量。
強(qiáng)烈不推薦創(chuàng)建全局變量。
全局變量適用于“這臺(tái)電腦上的所有algodoo場(chǎng)景”,包括以前的、未來(lái)新建的、以及你下載的別人的圖,都會(huì)有hp = 49這個(gè)變量。
然而你把圖分享給其他人,在別的電腦上打開(kāi),就不會(huì)有hp =49這個(gè)變量。
別亂動(dòng)控制臺(tái)!創(chuàng)建變量建議都在物體的腳本選單進(jìn)行,出了bug也好修復(fù)。
三、改變變量的數(shù)值
假如有個(gè)變量scene.my.hp = 100,以此為例介紹下改變此變量的方法。
改變變量,也在物體的腳本選單左上角進(jìn)行。
方法一,手動(dòng)賦值,格式是 變量名 = xxx
比如我直接輸入scene.my.hp = 120,它的值就變成120了。
再輸入scene.my.hp = 300,它的值就變成300了。
方法二,引用其他變量。
假設(shè)有另外一個(gè)變量scene.my.mp = 666
那么,如果我輸入scene.my.hp = scene.my.mp,按下回車(chē),就會(huì)發(fā)現(xiàn)scene.my.hp的值變得跟scene.my.mp一樣了,也變成了666.
又假設(shè),這個(gè)物體的密度density是2,那么我輸入scene.my.hp = density,scene.my.hp就變成了2
輸入scene.my.hp = density * 8,scene.my.hp就變成了16(2乘8)
方法三,自我運(yùn)算。
比如,輸入scene.my.hp = scene.my.hp - 1,按下回車(chē),scene.my.hp就變成了99;再輸入一次scene.my.hp = scene.my.hp - 1,按下回車(chē),scene.my.hp就變成了98。
總結(jié):自定義變量,隨便取名字(注意不同變量名字別重復(fù)了)。
物體本身的變量,是這個(gè)物體專(zhuān)用的。一定要加上下劃線前綴,才能永久保存。
場(chǎng)景變量,加上scene.my.前綴,這張圖里面所有東西都通用。
全局變量,新人別碰。