cocos2d JS touch屏幕点击事件监听 cc.EventListener.TOUCH

本文介绍如何在Cocos2d-x中设置触摸事件监听器,并实现单点触摸事件处理,包括触摸开始、移动及结束的回调函数。通过具体代码示例展示了如何检查触摸点是否在目标范围内,并根据触摸状态改变节点位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var self = this;
this.touchListener = cc.EventListener.create({
    event: cc.EventListener.TOUCH_ONE_BY_ONE,
/*
可选event类型列表:

cc.EventListener.TOUCH_ONE_BY_ONE (单点触摸)
cc.EventListener.TOUCH_ALL_AT_ONCE (多点触摸)
cc.EventListener.KEYBOARD (键盘)
cc.EventListener.MOUSE (鼠标)
cc.EventListener.ACCELERATION (加速计)
cc.EventListener.CUSTOM (自定义)

*/
    swallowTouches: true,  // 设置是否吞没事件,在 onTouchBegan 方法返回 true 时吞掉事件,不再向下传递。
    onTouchBegan:function(touch, event)    //实现 onTouchBegan 事件处理回调函数
    {
        19         20 
        return self.checkHit(touch.getLocation());  //传递坐标
    },

    onTouchMoved:function(touch, event)   //实现onTouchMoved事件处理回调函数, 触摸移动时触发
    {
        self.movePickedHitTile(touch.getLocation());
        return true;
    },

    onTouchEnded:function(touch, event)// 实现onTouchEnded事件处理回调函数
    {
        self.dropTile(touch.getLocation());
        return true;
    }
});

cc.eventManager.addListener(this.touchListener, node);  // 添加监听器到管理器
/*
这里的cc.eventManager 是一个单例对象,可直接拿来使用。
通过调用 addListener 函数可以将listener加入到管理器中。
需要注意的是第二个参数
如果传入的是一个Node对象,则加入的是SceneGraphPriority(精灵以显示优先级) 类型的listener
如果是一个数值类型的参数,则加入到的是FixedPriority 类型的listener。
*/

onTouchBegan:

checkHit:function(event)
{
    var target = event.getCurrentTarget();  // 获取事件所绑定的 target, 通常是cc.Node及其子类 

    // 获取当前触摸点相对于按钮所在的坐标
    var locationInNode = target.convertToNodeSpace(touch.getLocation());
    var s = target.getContentSize();
    var rect = cc.rect(0, 0, s.width, s.height);

    if (cc.rectContainsPoint(rect, locationInNode)) {       // 判断触摸点是否在按钮范围内
        console.log("sprite began... x = " + locationInNode.x + ", y = " + locationInNode.y);
        target.opacity = 180;
        return true;
    }
    return false;
}

onTouchMoved:

movePickedHitTile:function(event)
{
  var target = event.getCurrentTarget();
   var delta = touch.getDelta();              //获取事件数据: delta
   target.x += delta.x;
   target.y += delta.y;
},

onTouchEnded:

dropTile:function(pt)
{
// this.showDiscardTip(false);
//
// this.pickedTile.setScale(1);
//
// //出牌
// if(this.discardable(pt))
// {
//     this.discard();
// }
// else
// {
//     if(this.hitTestTile(this.hitTile, pt))
//     {
//         var tileSize = mb.getTileSize(this.hitTile.pos, this.hitTile.state);
//         var ptWorld = this.hitTile.convertToWorldSpaceAR(cc.p(0, 0));
//         this.pickedTile.x = ptWorld.x;
//         this.pickedTile.y = ptWorld.y + tileSize.height / 3;
//     }
//     else
//     {
//         mb.TilePool.getInstance().restoreTile(this.pickedTile);
//         this.pickedTile = null;
//
//         this.hitTile.setVisible(true);
//         this.hitTile = null;
//     }
// }

},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值