啟動(dòng)GM8.0,GMS也行= = 。。。 為了保證大家在實(shí)驗(yàn)的時(shí)候與本教程完全同步,推薦大家使用論壇的超強(qiáng)漢化破解版GM8.0
新建一個(gè)工程,創(chuàng)建物體和房間,并把這個(gè)物體放入到房間里。
這里我給object0放了個(gè)精靈,目的是讓大家知道已經(jīng)把這貨添加進(jìn)了房間里(我這么做貌似沒啥必要,防誤解還是扔進(jìn)去吧。)
之后,就要往物體里面寫代碼了,在object0的創(chuàng)建事件中,寫下如下代碼
fuck = "franniss";
這是在物體上簡單的定義了一個(gè)變量
接下來,在物體的空格鍵按下事件中,寫下如下代碼。
show_message(fuck);
效果可想而知,在敲擊空格鍵的時(shí)候,屏幕上會彈出一個(gè)消息提示框,那我我們來試一下。
敲擊空格鍵,彈出消息框:
一切看上去很正常,嗯。接下來,稍微改動(dòng)一下代碼,將創(chuàng)建事件中的代碼改寫成如下代碼。
var fuck;
fuck = "franniss";
這段代碼,就用到了var關(guān)鍵字,定義了一個(gè)臨時(shí)變量。
運(yùn)行游戲,敲擊空格鍵。
這時(shí)我們就發(fā)現(xiàn),在敲完空格鍵之后,并沒有彈出信息框,而是報(bào)了錯(cuò)。錯(cuò)誤的原因是一個(gè)未知的變量fuck,
我們已經(jīng)在創(chuàng)建事件中定義了fuck變量,為什么在按下空格事件中,這個(gè)變量不起作用呢?
實(shí)驗(yàn)證明,在創(chuàng)建事件中,已經(jīng)成功的定義出了fuck變量,但是在敲擊空格鍵的時(shí)候,這個(gè)變量就不存在了,所以,我們得出以下結(jié)論:
使用var關(guān)鍵字定義過的變量,只影響于當(dāng)前事件,并不作用于整個(gè)實(shí)例,當(dāng)事件結(jié)束的時(shí)候,這個(gè)變量會自動(dòng)的從內(nèi)存中刪除掉。
這個(gè)結(jié)果只是當(dāng)前得出的,并不是最標(biāo)準(zhǔn)的,下面,將在這個(gè)實(shí)驗(yàn)的基礎(chǔ)上增加更多的動(dòng)作來得到更準(zhǔn)確的定義。
刪除掉剛剛物體中的“按下空格”事件,并對創(chuàng)建事件進(jìn)行改動(dòng)。向創(chuàng)建事件中拖入兩個(gè)代碼按鈕,如下圖所示。
在第一個(gè)代碼塊中,寫下如下代碼:
var sb;
sb = "franniss";
在第二個(gè)代碼塊中,寫下如下代碼:
show_message(sb);
接下來,運(yùn)行游戲。查看效果
根據(jù)運(yùn)行結(jié)果我們會發(fā)現(xiàn),程序依然報(bào)錯(cuò),那么問題來了,我的var定義的變量明明和show_message時(shí)的變量在同一個(gè)事件里面,為什么還會報(bào)錯(cuò)。
這時(shí)我們再對程序進(jìn)行修改,刪除創(chuàng)建事件的一個(gè)代碼按鈕,留下一個(gè),并改寫成如下代碼:
var sb;
sb = "franniss";
show_message(sb);
運(yùn)行后你會發(fā)現(xiàn),程序正常運(yùn)行,彈出了灰色的信息提示框。
實(shí)驗(yàn)證明,在創(chuàng)建事件中,已經(jīng)成功的定義出了sb變量,但是想讓這個(gè)變量有效,所有使用到這個(gè)變量的語句都要和該變量的var定義處在同一代碼段內(nèi),因此,我們得出以下結(jié)論:
使用var關(guān)鍵字定義過的變量,只影響于當(dāng)前代碼段,并不作用于整個(gè)實(shí)例,當(dāng)該代碼段結(jié)束的時(shí)候,這個(gè)變量會自動(dòng)的從內(nèi)存中刪除掉。
我們大家所說的臨時(shí)變量,其實(shí)就是就是以前直接定義的一些變量,并不加var和global關(guān)鍵詞的修飾,其實(shí)這種說法是不對的,我們可以認(rèn)為,在GM中存在于四種類型的變量:
1.使用關(guān)鍵詞globalvar定義的全局變量;
2.不使用任何關(guān)鍵詞所定義在實(shí)例上的成員變量;
3.在變量名前加上global.的特殊的,定義在global上的成員變量;
4.使用關(guān)鍵詞var定義的,只作用于當(dāng)前代碼段上的臨時(shí)變量。
所謂的成員變量,只得就是該變量是影響整個(gè)實(shí)例的,在變量名使用global.這個(gè)比較特殊,可以稱之其為成員變量,但是我認(rèn)為,在這里為了讓大家不要和globalvar發(fā)生無解,還是將它當(dāng)作定義在global實(shí)例上的成員變量比較好,而且這個(gè)實(shí)例會全程存在于游戲中,它是一個(gè)比較特殊的實(shí)例。