在GameLayer的init函数里面添加touch的listener时,用的是下面的代码,实际上只处理了一个点,用cocos命令行打包成apk在手机上面跑的时候,
导致触摸没有响应。
if (cc.sys.capabilities.hasOwnProperty('touches')){
cc.eventManager.addListener({
prevTouchId: -1,
event: cc.EventListener.TOUCH_ALL_AT_ONCE,
onTouchesMoved:function (touches, event) {
var touch = touches;
if (this.prevTouchId != touch.getId())
this.prevTouchId = touch.getId();
else event.getCurrentTarget().processEvent(touches);
}
}, this);
}
```
后来看了js-test里面的代码里面处理TOUCH_ALL_AT_ONCE是这样处理的:
onTouchesMoved:function(touches, event) {
var target = event.getCurrentTarget();
for (var i=0; i < touches.length;i++ ) {
var touch = touches*;
var pos = touch.getLocation();
var id = touch.getId();
cc.log("Touch #" + i + ". onTouchesMoved at: " + pos.x + " " + pos.y + " Id:" + id);
target.update_id(id, pos);
}
},
```
手动尝试给moonwarriors加了一个循环判断再打包就可以用触摸移动飞船了。
之前一直都是参考moonwarriors来写代码,结果找了很久的问题,才发现解决方案在js-test里面:869:
看来以后还是优先看test的例子好一点Orz
ps:
另外给同样要弄触摸事件的同学提醒一下,TOUCH_ALL_AT_ONCE和TOUCH_ONE_BY_ONE两种事件的名称,一个有复数(onTouchesXXX),一个是没有复数的(onTouchXXX)。
*