在具體講解CLASS構(gòu)造前,想花點(diǎn)篇幅幫小鳥們理解下CLASS是什么東東。
還是來舉個(gè)例子,有一個(gè)機(jī)械戰(zhàn)士的MC,這個(gè)MC里有機(jī)械戰(zhàn)士完整的構(gòu)造,手腳、身體、武器……
但這個(gè)機(jī)械戰(zhàn)士仍然不能動(dòng),因?yàn)樗皇且痪邫C(jī)械,沒有大腦程序告訴它該怎么走動(dòng),怎么攻擊……
而我們做的“機(jī)械戰(zhàn)士控制.as”的CLASS,綁定在這個(gè)戰(zhàn)士身上。
這個(gè)CLASS可以看作為一個(gè)封閉的黑匣子,里面裝載了指導(dǎo)機(jī)械人行動(dòng)的程序,包括怎么移動(dòng)、怎么攻擊、怎么做事情A、怎么做事情B。
而這一切都是封閉在黑匣子里的,影響不到外界程序,外接程序也影響不到它。是個(gè)獨(dú)立的東西。
這個(gè)黑匣子可以裝載到任何一個(gè)機(jī)械戰(zhàn)士身上,任何一個(gè)機(jī)械戰(zhàn)士軀體的MC一旦綁定上這個(gè)CLASS,就能立即行動(dòng)起來。
而且我們可以給這個(gè)CLASS做個(gè)外界可以調(diào)用的接口。
就像黑匣子上裝了個(gè)可以給外界摁的按鈕,你摁一次它就發(fā)一次絕招。
封裝性的好處由此顯示出來了。
再闖關(guān)游戲里,經(jīng)常出現(xiàn)比如畫面上主角一人對(duì)N個(gè)敵人的場面。這些敵人每個(gè)都可以綁定同一個(gè)CLASS。就是說寫了一個(gè)CLASS分別裝載到N個(gè)實(shí)例化的MC中去,而不用每個(gè)敵人都各自寫一段代碼。
不過要說明,CLASS并不是只能實(shí)例化在MC上,還可以裝在例如Object之類的上面。
比如我們很常用的一個(gè)FLASH本來就有的CLASS:SOUND
mySound=new Sound()
mySound.attachSound("a.mp3")
mySound.start(0,1)
這里我們就可以看作Sound類實(shí)例化了在mySound的上,而attachSound和start都是Sound類的“按鈕”,可以讓外部操控這個(gè)裝載了Sound類的mySound。我們并不知道Sound這個(gè)CLASS內(nèi)部代碼是如何的,但我們知道按鈕可以用來干什么,用的也不是很爽嗎?
前面說了CLASS的基本應(yīng)用,可能有鳥鳥們要問了,我做個(gè)function一樣可以用啊,或者在MC里敲代碼,跟你寫CLASS一樣。
那為什么還要寫CLASS???
那下面我就來寫點(diǎn)CLASS的另外個(gè)重要的特性-“繼承”
先來個(gè)小例子:
隔壁阿三寫了個(gè)類“機(jī)器人控制.as”,里面寫了若干行的代碼,包括“移動(dòng)、跳躍”兩個(gè)個(gè)功能。
我現(xiàn)在也想寫個(gè)類“超級(jí)流氓機(jī)器人.as”,里面包括“移動(dòng)、跳躍、攻擊”三個(gè)功能。
和阿三寫的類比較起來,“移動(dòng)、跳躍”兩個(gè)功能是一樣的啦,我想寫的類只多了個(gè)“攻擊”功能~
于是可以偷懶了。
在我寫的類“超級(jí)流氓機(jī)器人.as”第一行加句簡單的代碼,就可以把阿三寫的類完全COPY過來。(代碼語法命令后面的課程會(huì)講的)
然后我的“超級(jí)流氓機(jī)器人.as”文件里,內(nèi)容就只有段寫“攻擊的代碼”。
看到這里,鳥鳥們又要問了,為什么不直接ctrl+c然后ctrl+v把阿三寫的類復(fù)制過來,然后在里面加?
別人寫的代碼,復(fù)雜的要死,反正我腦子轉(zhuǎn)不過來,不想去分析別人的東西。分析別人寫的代碼,痛苦的來~
日后我再要寫個(gè)“移動(dòng)、跳躍、翻滾”的代碼,我不是還要再ctrl+c然后ctrl+v?多麻煩!
假使我用ctrl+c然后ctrl+v的方法做了,但突然發(fā)現(xiàn)“移動(dòng)”功能里有個(gè)錯(cuò)誤要改……郁悶吧?你要一個(gè)個(gè).as文件改了。而如果是繼承的方法做的,你只要讓阿三把他寫的類修改了,你自己寫的兩個(gè)類就一點(diǎn)不需要改動(dòng)了,因?yàn)椤耙苿?dòng)”部分的功能,是直接繼承過來的嘛~
說到這里,順帶再提下,F(xiàn)LASH里我們經(jīng)常也在用類,只是你感覺不到。
做游戲用到最多,同時(shí)也是FLASH里最重要的類,就是~~~~~~~~~“MovieClip類”!
鳥鳥們不知不覺的就一直在用MovieClip類,比如你有沒有經(jīng)常寫:mc.onEnterFrame..
onEnterFrame就是MovieClip類里的一個(gè)方法,只要是個(gè)MC(自動(dòng)被綁上了MovieClip類),就都能用onEnterFrame。
現(xiàn)在回到第一節(jié)說的那個(gè)天上掉寶地下人物接的游戲。
人物有兩個(gè):小李和鳴人
經(jīng)過分析,這兩個(gè)人物基本控制部分是一樣的,然后就區(qū)別在兩個(gè)人的各自的特殊技能不一樣。
于是我們可以這么做:
先建個(gè)“人物基本控制.as”類
建個(gè)“小李.as”類,第一行一句代碼繼承“人物基本控制.as”類,然后在正文內(nèi)容里寫上小李特殊技能
見圖:
類的繼承,還可以覆蓋繼承過來類里的方法。
比如A類有move、jump、attack三個(gè)方法
我要寫個(gè)B類,也包括這三個(gè)方法,但是attack這個(gè)方法和A類的attack有點(diǎn)不同,而move、jump這兩個(gè)方法則和A類里的一模一樣。
于是我們寫B(tài)類,第一行先寫句話繼承了A類。然后在正文里把a(bǔ)ttack方法重寫一次,就自動(dòng)覆蓋掉了繼承過來的A類的attack方法。其它的方法就不用寫了,因?yàn)橹苯永^承過來了。
讓我們來換個(gè)思路做上面那個(gè)例子。
直接寫了“小李.as”類,然后讓“鳴人.as”類繼承小李類,正文里只需要把特殊技能方法重寫遍就OK了。
見圖:
看了那么多概念,小鳥們要想,咋還不教具體怎么寫CLASS呢?
別急啊,下節(jié)里會(huì)簡單的教些的。
其實(shí)我對(duì)這種死東西教學(xué)還是比較頭大的,鳥鳥們也可以自己網(wǎng)上搜下具體CLASS撰寫格式、規(guī)矩和變量、方法類型??隙ū任医痰囊敿?xì)。因?yàn)槲以贑LASS方面也只能算只比小鳥略微胖點(diǎn)點(diǎn)的中鳥啊,哈哈
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇