再談?wù)剠^(qū)塊原型的定義
既然我們把區(qū)塊作為對象處理,我們可以利用對象的許多優(yōu)點(diǎn)。對象有個(gè)美麗的特性是他們可以繼承屬性。如果你認(rèn)真閱讀了上一章,你會記得我們這樣寫區(qū)塊的原型:
game.Tile0= function () {}; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1;
這些讓我們寫一次原型就可以在其他地方應(yīng)用,創(chuàng)建新的方塊時(shí)候就使用這個(gè)模板。我們還可以深入研究一下邏輯,再減少一些工作量。
讓我們聲明一個(gè)通用的區(qū)塊類:
game.TileClass = function () {}; game.TileClass.prototype.walkable=false; game.TileClass.prototype.frame=20;
這里我們用了一個(gè)假設(shè)。假設(shè)每個(gè)區(qū)塊都是不可通行的,而且都顯示在第20幀。當(dāng)然了,實(shí)際的區(qū)塊不全是不可通行的,否則我們不能移動。而且他們也不會都顯示在第20幀。問題看起來很嚴(yán)重,實(shí)際上不然。我們只是定義了這兩個(gè)通用屬性而已,我們會讓他完美工作的。
現(xiàn)在我們創(chuàng)建新的區(qū)塊類型:
game.Tile0 = function () {}; game.Tile0.prototype.__proto__ = game.TileClass.prototype; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1; game.Tile1 = function () {}; game.Tile1.prototype.__proto__ = game.TileClass.prototype; game.Tile1.prototype.frame=2; game.Tile2 = function () {}; game.Tile2.prototype.__proto__ = game.TileClass.prototype;
通過使用聰明的__proto__,我們不需要重復(fù)寫同樣的屬性了。我們的區(qū)塊從TileClass類中獲得了所有必要的材料。當(dāng)我們這樣創(chuàng)建新的區(qū)塊類型后:
game.Tile2 = function () {}; game.Tile2.prototype.__proto__ = game.TileClass.prototype;
所有后來創(chuàng)建的Tile2區(qū)塊都繼承了屬性walkable=false、frame=20。這是不是很美妙呢?但是還沒有結(jié)束,我們可以改變這兩個(gè)屬性?矗
game.Tile0 = function () {}; game.Tile0.prototype.__proto__ = game.TileClass.prototype; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1;
我們在繼承了TileClass類的屬性之后,又改寫了walkable、frame的值。最后的結(jié)果是Tile0區(qū)塊的walkable為true,frame為1。
所有這些可能太復(fù)雜了些,畢竟我們只有少量的區(qū)塊類型和屬性。但是你如果要做一個(gè)復(fù)雜的區(qū)塊游戲,每個(gè)區(qū)塊都有很多屬性,那么單單定義這些重復(fù)的屬性就已經(jīng)夠繁的了
出處:藍(lán)色理想
責(zé)任編輯:qhwa
上一頁 創(chuàng)建方塊 下一頁 英雄/主角
◎進(jìn)入論壇Flash專欄版塊參加討論
|