Cocos2d iphone 在它们之间的小距离内检测CCSprite触摸
我在Cocos2d iphone 在它们之间的小距离内检测CCSprite触摸,cocos2d-iphone,Cocos2d Iphone,我在CCLayer中有一些小精灵(宽度/高度),我想检测它们中的哪一个被触摸。我使用以下代码 - (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; CGRect rect = sprite.boundingBox; // i am doing this becaus
CCLayer
中有一些小精灵(宽度/高度),我想检测它们中的哪一个被触摸。我使用以下代码
- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
CGRect rect = sprite.boundingBox;
// i am doing this because of the small size of the sprites,
// so it would be more easy to detect if a sprite is taped and then move it.
if (rect.size.width > rect.size.height) {
rect.size.width *= 2.5;
rect.size.height *= 5;
rect.origin.y -= rect.size.height / 2;
} else {
rect.size.width *= 5;
rect.size.height *= 2.5;
rect.origin.x -= rect.size.width / 2;
}
CCSprite *s = nil;
for (CCSprite *sprite in [self children]) {
if (CGRectContainsPoint(rect, touchPoint)) {
s = sprite;
break;
}
}
if (s != nil) {
// do something here
}
return YES;
}
除了两个精灵彼此非常接近(不重叠)时,所有这些都可以正常工作。然后,由于它们之间的距离很小,检测到错误的精灵
你知道我该怎么纠正吗 如果您试图放大矩形,使其中心保持在原来的位置,则应使用:
rect.origin.y -= (rectFinalHeight - rectOriginalHeight) / 2;
及
这将是:
if (rect.size.width > rect.size.height) {
rect.size.width *= 2.5;
rect.size.height *= 5;
rect.origin.y -= rect.size.height * 4 / 2;
} else {
rect.size.width *= 5;
rect.size.height *= 2.5;
rect.origin.x -= rect.size.width * 4 / 2;
}
依我看,在这两种情况下,您都应该沿两个轴调整矩形原点(不仅在一种情况下沿x轴调整,在另一种情况下沿y轴调整),否则您的矩形将不会居中。但是你更清楚你想做什么,这里…精灵图像有透明的边框吗?因为这些边界也在边界框内。不,它们不在边界框内。我认为问题在于如何调整rect的大小,使其更容易检测精灵。但如果不这样做,它是非常困难的检测,因为它的小尺寸。答案的第一部分是正确的。我先试了一下,按你的建议,但没用。然后我试着减去原来的宽度/高度,效果很好。非常感谢。
if (rect.size.width > rect.size.height) {
rect.size.width *= 2.5;
rect.size.height *= 5;
rect.origin.y -= rect.size.height * 4 / 2;
} else {
rect.size.width *= 5;
rect.size.height *= 2.5;
rect.origin.x -= rect.size.width * 4 / 2;
}