cocos2dx 3.x 精灵重叠时点击最上层的精灵

ps. 这个方法只适用设置精灵的触摸..

    //注册触摸事件..3.X后可以在这样写..不需要重新声明
    EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = [](Touch* pTouch, Event* pEvent){
        return true;
    };
    listener->onTouchMoved = [](Touch* pTouch, Event* pEvent){
    };
    listener->onTouchEnded = [](Touch* pTouch, Event* pEvent){
    };
    //注册精灵监听..第1个精灵和第2个精灵
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, spr);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), spr1);

另一种写法

    //创建精灵
    Size size = Director::getInstance()->getWinSize();

    Sprite* sp1 = Sprite::create("sprite1.png");
    sp1->setPosition(Point(size.width * 0.5f, size.height * 0.5f));
    this->addChild(sp1);

    Sprite* sp2 = Sprite::create("sprite2.png");
    sp2->setPosition(Point(size.width * 0.5f, size.height * 0.5f));
    this->addChild(sp2);

    //注册触摸
    EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
    listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
    listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
    listener->setSwallowTouches(true);

    //注册精灵监听
     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, sp1);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), sp2);  
bool HelloWorld::onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){
    //获取当前点击的精灵
    Sprite* target = static_cast<Sprite*>(pEvent->getCurrentTarget());
    if (target->getBoundingBox().containsPoint(pTouch->getLocation()))
        return true;//点击到了

    return false;
}
void HelloWorld::onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){
    Sprite* target = static_cast<Sprite*>(pEvent->getCurrentTarget());
    //触摸的图片移动
    target->setPosition(target->getPosition() + pTouch->getDelta());
}

void HelloWorld::onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){

}
时间: 2024-10-11 17:41:11

cocos2dx 3.x 精灵重叠时点击最上层的精灵的相关文章

iOS中防止两个按钮同时点击的方法

在iOS开发中通常会遇到,两个靠的很近的按钮,一不小心两个按钮同时点击了. 神奇的bug就产生了,如果两个按钮事件都是跳转页面的话,就会出现连跳两个页面的情况. 通常解决此问题的方法是:定义一个BaseViewController. 设置一个方法setExclusiveTouchForButtons:(UIView *)myView -(void)setExclusiveTouchForButtons:(UIView *)myView { for (UIView * v in [myView s

android 防止对控件的重复点击和同时点击多个控件

引 在一个手机界面中,用户经常会同时点击多个控件,经常会在短时间内对某一个控件点击多下,这样就会造成各种各样的bug. 防止点击多个控件 只要在xml文件中的父容器总加入这样一行代码即可: android:splitMotionEvents="false" 如在下面的LinearLayout中加入这行话,表示每一次只能点击LinearLayout其中的一个元素,点击了其他的元素是无效的. <LinearLayout android:layout_width="match

创建3D模型/添加屏幕监听,点击屏幕时,精灵带有旋转的移动

 3D模型创建 //3D models auto model = Sprite3D::create("Sprite3DTest/boss1.obj"); model->setScale(4); model->setTexture("Sprite3DTest/boss.png"); model->setPosition3D(Vec3(s.width/2, s.height/2, 0)); addChild(model); EventListene

listview 两个Item可以同时点击

android:splitMotionEvents="false" ListView的这个属性可以限制它不能同时点击两个Item

cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)

1 // 2 // MainScene.hpp 3 // helloworld 4 // 5 // Created by apple on 16/9/19. 6 // 7 // 8 9 #ifndef MainScene_hpp 10 #define MainScene_hpp 11 12 #include <stdio.h> 13 #include "cocos2d.h" 14 USING_NS_CC; 15 using namespace cocos2d; 16 //定

按键精灵获取系统时间定时点击

'==========以下是按键精灵录制的内容==========dim h,m,sRem [wait]h=Hour(time)m = Minute(time)s = Second(time)UserVar HH=0 "时"UserVar MM=0 "分"UserVar SS=0 "秒" If h = HH and m = MM and s=SS MoveTo 82, 40Delay 0LeftDown 1Delay 0LeftClick 1De

Cocos2d-x设置吞没单击属性来避免精灵重叠被点击后的事件续传

代码如下: Size visibleSize = Director::getInstance()->getVisibleSize(); /* create two sprites which have overlapped parts */ Sprite* sp1 = Sprite::create("sprite1.png"); sp1->setPosition(Point(visibleSize.width * 0.5f, visibleSize.height * 0.5

U3D 精灵的点击监听

U3D游戏中,可能会用到点击对象,完成某项操作, 方法一:可以通过接收Input对象的输入,进行利用 方法二:给对象绑定一个collier 组件,然后就能后使用内置方法 void OnMouseDown() { print("鼠标按下了"); } 只要给精灵绑定这个组件,那么鼠标的一系列的操作就都可以完成 OnMouseDown OnMouseDown is called when the user has pressed the mouse button while over the

【cocos2d-x学习笔记】导演,场景,层,精灵模型

CCDirector导演 单例类,通过CCDirector::sharedDirector函数去获取导演对象 CCDirector* d = new CCDirector() // error,单例对象不应该自己去创建 1)导演负责初始化环境 2)导演负责推动游戏进程 runWithScene, replaceScene, pushScene, popScene 3) 导演负责坐标变换 CCScene 场景:一幕戏 从cocos2dx数据结构来收,它是一个渲染树的根节点 任一时刻,只有一个Sce