再谈谈区块原型的定义
既然我们把区块作为对象处理,我们可以利用对象的许多优点。对象有个美丽的特性是他们可以继承属性。如果你认真阅读了上一章,你会记得我们这样写区块的原型:
game.Tile0= function () {}; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1;
这些让我们写一次原型就可以在其他地方应用,创建新的方块时候就使用这个模板。我们还可以深入研究一下逻辑,再减少一些工作量。
让我们声明一个通用的区块类:
game.TileClass = function () {}; game.TileClass.prototype.walkable=false; game.TileClass.prototype.frame=20;
这里我们用了一个假设。假设每个区块都是不可通行的,而且都显示在第20帧。当然了,实际的区块不全是不可通行的,否则我们不能移动。而且他们也不会都显示在第20帧。问题看起来很严重,实际上不然。我们只是定义了这两个通用属性而已,我们会让他完美工作的。
现在我们创建新的区块类型:
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__,我们不需要重复写同样的属性了。我们的区块从TileClass类中获得了所有必要的材料。当我们这样创建新的区块类型后:
game.Tile2 = function () {}; game.Tile2.prototype.__proto__ = game.TileClass.prototype;
所有后来创建的Tile2区块都继承了属性walkable=false、frame=20。这是不是很美妙呢?但是还没有结束,我们可以改变这两个属性。看:
game.Tile0 = function () {}; game.Tile0.prototype.__proto__ = game.TileClass.prototype; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1;
我们在继承了TileClass类的属性之后,又改写了walkable、frame的值。最后的结果是Tile0区块的walkable为true,frame为1。
所有这些可能太复杂了些,毕竟我们只有少量的区块类型和属性。但是你如果要做一个复杂的区块游戏,每个区块都有很多属性,那么单单定义这些重复的属性就已经够繁的了
出处:蓝色理想
责任编辑:qhwa
上一页 创建方块 下一页 英雄/主角
◎进入论坛Flash专栏版块参加讨论
|