CitrusEngine横版游戏开发教程(四)Entity
这一节我给大家介绍一下citrus.system.Entity
Entity类可以自由的组合行为,使用方式类似装饰者模式,但却有别于装饰者
_heroEntity = new Entity("heroEntity");
_physics = new DraggableHeroPhysicsComponent("physics", {x:200, y:270, width:40, height:60});
var input:InputComponent = new InputComponent("input");
var collision:HeroCollisionComponent = new HeroCollisionComponent("collision");
var move:HeroMovementComponent = new HeroMovementComponent("move");
_view = new HeroViewComponent("view", {view:"PatchSpriteArt.swf"});
_heroEntity.add(_physics).add(input).add(collision).add(move).add(_view);
_heroEntity.initialize();
addEntity(_heroEntity, _view);
为了方便理解 ,下面我来模拟一下Entity的实现
Entity类:
package com.decorator { import flash.display.Sprite; /** * @author cong QQ:19312413 */ public class Entity extends Sprite { public function Entity() { } public function initialize():void { trace("我是实体"); } } }
Behavior类
package com.behavior { /** * @author cong QQ:19312413 */ public class Behavior { public var entity:Entity; public function Behavior() { } public function initialize():void { if(entity!=null) { trace("行为初始化"); } } } }
下面我们创建两个行为类
package com.behavior { /** * @author cong QQ:19312413 */ public class TalkBehavior extends Behavior { public function TalkBehavior() { } override public function initialize():void { trace("我会说话"); } } }
package com.behavior { /** * @author cong QQ:19312413 */ public class WalkBehavior extends Behavior { public function WalkBehavior() { } override public function initialize() : void { trace("我会走路"); } } }
文档类:
package { import com.behavior.Entity; import com.behavior.TalkBehavior; import com.behavior.WalkBehavior; import flash.display.Sprite; /** * @author cong QQ:19312413 */ public class BehaviorTest extends Sprite { public function BehaviorTest() { var entity:Entity = new Entity(); var walkBehavior:WalkBehavior = new WalkBehavior(); var talkBehavior:TalkBehavior = new TalkBehavior(); entity.addBehavior(walkBehavior).addBehavior(talkBehavior); entity.initialize(); } } }