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