比如我addChild了两个node,Z是不一样的,而且两个的大小也不一样,但是有重叠,我如何判断点击到的是哪个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%复制到地址栏……
自己编写个子类,继承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代替你那个复杂的图形? ?。。。。。