英雄
每個(gè)游戲都有英雄。英雄要打敗壞蛋、拯救公主,還要拯救全世界。我們也要加一個(gè)英雄,不過(guò)他暫時(shí)還不會(huì)拯救世界,他什么也干不會(huì),但是他已經(jīng)來(lái)了:
看到了嗎,就是那個(gè)是紅色的方塊:) 什么,看起來(lái)不夠帥?你當(dāng)然可以自己畫一個(gè)呀。他就是庫(kù)中那個(gè)名字是“char”的那個(gè)mc,而且他已經(jīng)被導(dǎo)出為“char”連接。注意不要讓英雄mc比方塊大!
另外還要注意,英雄mc的注冊(cè)點(diǎn)是在中心,而方塊的注冊(cè)點(diǎn)則在左上角:
要來(lái)些代碼?好吧,加上這句: char={xtile:2, ytile:1};
這句代碼定義了一個(gè)char對(duì)象。這個(gè)char對(duì)象將會(huì)被賦予所有的關(guān)于英雄的信息: 他如何移動(dòng)、他感覺(jué)怎么樣、他吃什么……等等。
不過(guò)這一次我們只給他兩個(gè)屬性:xtile和ytile。他們記錄英雄所處的方塊。當(dāng)他四處走動(dòng)的時(shí)候,我們將會(huì)更新xtile/ytile屬性,這樣我們總能知道他站在那個(gè)方塊上面。 例如當(dāng)xtile=2,ytile=1時(shí),他腳下的方塊就是“t_1_2”。實(shí)際上,他是站在左數(shù)第3塊、上數(shù)第2塊方塊上,記得坐標(biāo)是從0開始數(shù)的。
我們以后會(huì)給他增加更多屬性。
為了讓英雄站到舞臺(tái)上,在buildMap函數(shù)中,在for循環(huán)外(下面),添加這幾行代碼: game.clip.attachMovie("char", "char", 10000); char.clip = game.clip.char; char.x = (char.xtile * game.tileW)+game.tileW/2; char.y = (char.ytile * game.tileW)+game.tileW/2; char.width = char.clip._width/2; char.height = char.clip._height/2; char.clip._x = char.x; char.clip._y = char.y;
第一行又復(fù)制了一個(gè)mc到game.clip這個(gè)mc中(你還記得我們用game.clip代表_root.tiles吧?),然后給他實(shí)例名“char”。
然后我們把char的路徑保存到char對(duì)象中,這樣當(dāng)我們需要訪問(wèn)char這個(gè)mc時(shí), 不用再敲入mc的完整路徑_root.tile.char了。這樣做的好處是,如果我們要把char這個(gè)mc放到另外的地方,改動(dòng)代碼就會(huì)方便許多。
接下來(lái)我們要計(jì)算char對(duì)象的兩個(gè)屬性:x和y。你也許會(huì)納悶,為什么還要兩個(gè)屬性,我們不是有xtile和ytile這兩個(gè)屬性了嗎?記住,xtile和ytile只是腳底下方塊的位置,不是我們需要的確切的象素值。英雄當(dāng)然可以在同一塊方塊上面走動(dòng),x和y屬性才可以給出正確的坐標(biāo)。
還有,當(dāng)x和y的值計(jì)算正確后再賦給_x和_y,這樣做是有好處的,尤其是碰撞檢測(cè)的時(shí)候。
我們通過(guò)英雄所在的方塊計(jì)算出英雄的實(shí)際位置(象素值)。首先,char.xtile*game.tileW得到所在方塊的實(shí)際坐標(biāo),在加上方塊大小的一半,這樣英雄就站到了方塊的中間。如果你有些迷糊的話,可以對(duì)照他們的注冊(cè)點(diǎn)自己畫一下。
接著我們把英雄mc的寬度(寬度)的一半記為char對(duì)象的width(height)屬性。這樣做是很有用的,尤其是計(jì)算英雄的邊界的時(shí)候。你也可以自己定義char的這兩個(gè)屬性的值。有些英雄可能有長(zhǎng)長(zhǎng)的頭發(fā),而且允許頭發(fā)碰到墻上,身體卻不行,這樣你就應(yīng)該按需要自己定義。
最后兩行把英雄放到我們計(jì)算好的位置上去。 char.clip._x = char.x; char.clip._y = char.y;
下載代碼和源文件
出處:藍(lán)色理想
責(zé)任編輯:qhwa
上一頁(yè) 再談?wù)剠^(qū)塊原型的定義 下一頁(yè) 鍵盤控制的移動(dòng)
◎進(jìn)入論壇Flash專欄版塊參加討論
|