这对我来说是激动人心的(因为我原本只是写写简单的交互JS),上一节我们讲到PushButton最大的特点就是以组件为中心,一个实体好比一个空箱子,放在里边好多各种功能的石头,这个箱子就具有了各种各样的功能,这些有魔力的石头,也就是我们所说的组件。
所以当我们要做这样一个应用时,你可能会自然的想到,要被鼠标控制,这样的一个功能,是不是一个组件的?you're right ,my friend。
复制内容到剪贴板
看了上面的代码,我们的目光会锁定在这个类继承的这个叫 TickComponent,这是一个比较关键的组件,在我看来,既然FLEX没有时间轴的概念,那么Tick这个概念就很重要了,这对于你在每一个tickRate时间点上都可对相应的实体进行检测和控制,此篇就是对键盘的简单控制。
代码:
package
{
import com.pblabs.engine.components.*;
import com.pblabs.engine.entity.*;
import com.pblabs.engine.core.*;
import flash.geom.Point;
public class KeyboardController extends TickedComponent
{
public var PositionReference:PropertyReference = null;
public var Speed:Number = 0;
protected var xMovement:Number = 0;
protected var yMovement:Number = 0;
public override function onTick(tickRate:Number):void
{
var position:Point = owner.getProperty(PositionReference);
if (InputManager.isKeyDown(InputKey.RIGHT))
{
xMovement += Speed * tickRate;
while (xMovement >= 1)
{
position.x += 1;
xMovement -= 1;
}
}
else if (InputManager.isKeyDown(InputKey.LEFT))
{
xMovement -= Speed * tickRate;
while (xMovement <= -1)
{
position.x -= 1;
xMovement += 1;
}
}
if (InputManager.isKeyDown(InputKey.DOWN))
{
yMovement += Speed * tickRate;
while (yMovement >= 1)
{
position.y += 1;
yMovement -= 1;
}
}
else if (InputManager.isKeyDown(InputKey.UP))
{
yMovement -= Speed * tickRate;
while (yMovement <= -1)
{
position.y -= 1;
yMovement += 1;
}
}
}
}
}
键盘控制的细节就不做多讲解,xMovement/yMovement在我理解就是一个缓冲,让你的每一次键盘操作更流畅而不僵硬。
这里我们第一次在组件中看到owner的身影,他代表对该实体的引用(也就是说每个石头上有这么个标记要owner,指明放石头的盒子),通过owner可以访问很多实体的属性,比如现在我们说的这个position,还有未来要接触比较关键的线速度(linearVelocity)。
我们写完这个组件后需要把它加入到我们原本编辑好的圈圈实体内,像添加其他组件一样
复制内容到剪贴板
组件实体的结构化很彻底,有没有又让你想起什么?XML?
代码:
var Input:KeyboardController = new KeyboardController();
Input.PositionReference = new PropertyReference("@Spatial.position");
Input.Speed = 50;
entity.addComponent(Input, "Input");
运行实例,你会发现,小圈圈已经可以跟上你的大脑畅游了
DEMO页面: http://www.brighthub.com/hubfolio/matthew-casperson/media/p/61005.aspx
DEMO下载页面: http://www.brighthub.com/hubfolio/matthew-casperson/media/p/61006.aspx
英文原版教程页面: http://www.bukisa.com/articles/225993_pushbutton-tutorial-series-keyboard-input(注:该国外教程服务器不稳定,偶尔睡觉)
下一期我们将尝试让我们的角色变得更有趣一些,把圆圈变成会动的小人?
感谢 Matthew Casperson,感谢无私的分享。