请教如何判断点击到的是哪个node或者sprite

比如我addChild了两个node,Z是不一样的,而且两个的大小也不一样,但是有重叠,我如何判断点击到的是哪个NODE呢?有直接的方法吗?另外如何判断点到的是哪个sprite?

新手,大神们,详细点

不能沉。。。自己顶

设置TAG,sprite->setTag(x),通过tag调用

— Begin quote from ____

iniwap 发表于 2012-7-11 14:05 url

sprite是可以这样,谢了。NODE不知道怎么搞。。。

— End quote

那你可以用数组啊,遍历检测下坐标,也不复杂啊,还有就是CCSprite就是CCNode的子类啊,node也有setTag吧

— Begin quote from ____

xua131988 发表于 2012-7-11 13:45 url

应该只有层才具有捕获事件的能力, 或者特殊节点(菜单什么的)

普通的node, 只有用坐标位置去判断了.

— End quote

好像是这样,不过这样很蛋疼啊。。。。

— Begin quote from ____

红光 发表于 2012-7-11 13:38 url

设置TAG,sprite->setTag(x),通过tag调用

— End quote

sprite是可以这样,谢了。NODE不知道怎么搞。。。

问一下楼上,能简单贴些用tag实现检测的代码吗?

sprite如果是不规则图形,怎么检测出点击的是不透明区域呢?就算用坐标位置也无法方便地实现吧?
要么自己再弄张非透明区域的mask。。。这个就有点麻烦了,也消耗内存

求大神们解答。

刚整理了一下:%url%复制到地址栏……

http://firedragonpzy.d3.tuidc.com/index.php/archives/589

自己编写个子类,继承sprite和CCTargetedTouchDelegate类。覆写

virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);

方法。这个方法中,会从最上层向下查找,返回true代表已经找到,消息传递到此为止。false代表这层sprite不是要接收到消息的sprite,将这个消息继续向深层传递。示例:

bool MySprite::ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *event){
    if(containsTouchLocation(touch)){
        cout<<"Touch:"<<this->getTag()<<endl;
        return true;
    }
    return false;
}

其中containsTouchLocation自己实现,通过this->getPosition获取到该sprite的position point,然后判断touch是否落在position point内,如果是则返回true(表明消息传递到此为止)。如果没有则返回false(表明这个sprite不是,继续传递)。

但是如果是个负责图形……那就需要一定算法了……比较方便的方法是用一个rect代替你那个复杂的图形? ?。。。。。