creator3.x 或 creator3d 版
InputManager_creator3d-3.0.zip (2.0 KB)
creator2.x版
InputManager_creator2.x.zip (1.9 KB)
使用方法,把InputManager.ts丢进项目里,然后在其它脚本的update里调用
参考Unity的做法,是不是一样
对比Creator原有的做法
systemEvent.on(SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
private onKeyDown(event:EventKeyboard)
{
var keyCode:number = event.keyCode;
if(keyCode == macro.KEY.q)
{
//持续按下Q键,一直触发
}
}
和creator的原本做法对比是不是觉得原本做法很繁琐,而且原本的监听SystemEvent.EventType.KEY_DOWN按下事件是持续事件,只要你按住按键不放,事件会一直触发,很恶心,想要按下瞬间事件都没有。还有注册了事件时刻记住要注销事件,一旦忘记了,脚本被销毁了,事件还在监听,触发了按键一定会报异常
我提供的Input.getKeyDown,是只触发一次,Input.getKey是长按一直触发,Input.getKeyUp是释放,这些接口和unity的Input接口功能一模一样。不用监听事件,也没有事件概念,脚本销毁就触发不到按键事件。
除了按键事件之外,还默认提供了方向控制接口
Input.axis.x, Input.axis.y
对应unity的
Input.GetAxis(“Horizontal”), Input.GetAxis(“Vertical”)
默认是WASD或上下左右方向键,这也和unity一样。
//Input.axis的使用
update(deltaTime: number)
{
this.node.translate(new Vec3(Input.axis.x * deltaTime * 100,Input.axis.y * deltaTime * 100,0));
//100是移动速度,按WASD 或键盘方向键就可以移动物体了
//这样方便很多了吧,不用每次自己监听事件释放事件,直接用就可以了
}
最后还有一个unity的Input.mousePosition没完成功能,这个是实时更新最新的鼠标位置,因为通过系统监听鼠标事件时,一旦其它Node监听了鼠标事件,事件就被截获,导致系统监听不到鼠标事件,看各位论坛大神有没有办法实现这个功能