cocos2dx js 单点触摸事件
场景:
在游戏制作中经常会遇到这样一个需求,就是用手托着目标在屏幕内任意移动。该需求主要涉及到cocos事件机制,需明白cc.eventManager事件管理器的使用。这里将演示用手托着小猪佩奇在屏幕内移动,在结束触摸后小猪就回到初始位置。
代码
setUpPig : function () {
//pig
this.myPig = new cc.Sprite("#"+testPng.litterPig_png);
this.myPig.attr({
x: this.designSize.width / 2 ,
y: this.designSize.height / 2
});
this.spriteBg.addChild(this.myPig, 2);
//起始位置
var startPoint = cc.p(this.designSize.width / 2 ,this.designSize.height / 2);
//事件监听器
var pigListener = cc.EventListener.create({
//单击事件
event:cc.EventListener.TOUCH_ONE_BY_ONE,
swallowTouches:true,
target:this,
onTouchBegan:function (touch,event) {
//获取当前事件触发对象
var target = event.getCurrentTarget();
//将触发点转换为基于当前事件触发对象的本地坐标
var posInNode = target.convertToNodeSpace(touch.getLocation());
//获取当前事件触发对象的大小
var size = target.getContentSize();
//区域(一般为需要拖动对象的大小范围)
var rect = cc.rect(0,0,size.width,size.height);
//当前触摸点是否在rect范围内
var boolRet =cc.rectContainsPoint(rect,posInNode);
//在则让事件继续往下走;不在则将事件吞噬,下面移动和结束将不会调用。
return boolRet;
},
onTouchMoved : function (touch,event) {
var target = event.getCurrentTarget();
var delta = touch.getDelta();
target.x += delta.x;
target.y += delta.y;
},
onTouchEnded:function (touch,event) {
var target = event.getCurrentTarget();
var moveAni = cc.moveTo(0.5,startPoint);
target.runAction(moveAni);
}
});
//将事件监听器叫由事件管理器管理
cc.eventManager.addListener(pigListener,this.myPig);
//为事件监听器添加优先级,第二个参数越小,则优先级越高
cc.eventManager.setPriority(pigListener,-200);
this.myPig.listener = pigListener;
},