(此文为转载,原出处不详,而由于某种原因只通过CSDN的BLOG在不同地点不同网域共享信息,如有不妥请告知,抱歉)
上一篇用PBE在舞台上画了一个矩形,今天我们来让该矩形动起来。
1,大概思路:编写一个能控制该矩形动的component,然后将该component关联到该矩形上;
2,编写自定义的component。可继承的component有
AnimatedComponent,
BasicSpatialManager2D,
Box2DManagerComponent,
Box2DSpatialComponent,
DataComponent,
EventSoundTrigger,
GoogleSpreadsheetTweaker,
GroupManagerComponent,
GroupMemberComponent,
HealthComponent,
MachineDescription,
MultiSpriteSheetHelper,
SpriteContainerComponent,
ThinkingComponent,
TickedComponent,而这些都是继承EntityComponent的,EntityComponent是所有component类的基类。这里我们要改变矩形的坐标位置,选择继承自
TickedComponent,文档中对
TickedComponent类的解释是:需要每一个tick都表现状态的组件的基类,用Flash的话说,就是需要每一帧去表现其不同形态、位置、大小等的基类。
package
{
import com.pblabs.engine.components.TickedComponent;
import com.pblabs.engine.entity.PropertyReference;
import flash.geom.Point;
import com.hexagonstar.util.debug.Debug;
/**
* ...
* @author luoyuqiang
*/
public class DemoControllerComponent extends TickedComponent
{
//保存对矩形的Spatial组件中的position属性的引用
public var positionReference:PropertyReference = new PropertyReference("@Spatial.position");
//方向变量
private var direction:int = 1;
// 每一帧运行一次onTick()
public override function onTick(tickRate:Number):void
{
try {
var position:Point = owner.getProperty(positionReference) as Point;
//是否到最左边
if (position.x <=-300) {
direction = 1;
position.y += 20;
}
//是否到最右边
else if (position.x >=300) {
direction = -1;
position.y += 20;
}
position.x += direction * 5;
owner.setProperty(positionReference, position);
}catch (err:Error) {
Debug.trace(err.message)
}
}
}
}
{
import com.pblabs.engine.components.TickedComponent;
import com.pblabs.engine.entity.PropertyReference;
import flash.geom.Point;
import com.hexagonstar.util.debug.Debug;
/**
* ...
* @author luoyuqiang
*/
public class DemoControllerComponent extends TickedComponent
{
//保存对矩形的Spatial组件中的position属性的引用
public var positionReference:PropertyReference = new PropertyReference("@Spatial.position");
//方向变量
private var direction:int = 1;
// 每一帧运行一次onTick()
public override function onTick(tickRate:Number):void
{
try {
var position:Point = owner.getProperty(positionReference) as Point;
//是否到最左边
if (position.x <=-300) {
direction = 1;
position.y += 20;
}
//是否到最右边
else if (position.x >=300) {
direction = -1;
position.y += 20;
}
position.x += direction * 5;
owner.setProperty(positionReference, position);
}catch (err:Error) {
Debug.trace(err.message)
}
}
}
}
跟前一篇的代码结合起来,将得到从上至下、从左到右或从右到左循环移动的矩形。
总结:关键是理解组件在PBE中起到的作用,以及其跟Entity的关系,和获取、设置Entity组件里属性的方法。