0

我刚开始学习一些cocos2d,这个问题困扰了我很长一段时间。基本上我想要做的是通过使用ccTouchBeganand检查触摸是否落在精灵边界框上来移动层中的精灵ccTouchMoved

一切正常,直到我移动图层,其中包括许多其他精灵并且也比屏幕尺寸大。在我移动图层后,精灵的边界框与精灵图像显示的位置不同。以前有没有人遇到过类似的问题?

4

2 回答 2

2

精灵boundingBox总是相对于精灵的父坐标系。如果您移动、旋转或缩放父级,子级仍将具有相同的boundingBox. 您可以将其转换为另一个坐标系。如果父级仅被移动(未旋转或缩放),您可以通过更改 的 来转换为世界坐标originboundingBox

CGRect boundingBox = child.boundingBox;
boundingBox.origin = [child.parent convertToWorldSpace:boundingBox.origin];
NSLog(@"%@", NSStringFromCGRect(boundingBox));

如果缩放父级,则子级 boundingBox 的大小会相应更改。如果父对象被旋转,它会变得非常复杂,因为子对象boundingBox的比例和纵横比都可以改变。如果您只想测试是否在 boundigBox 中发生了触摸,请将触摸位置转换为子父级的坐标系:

CGPoint touchLocation = [child.parent convertToNodeSpace:touchWorldLocation]

现在child.boundingBoxtouchLocation在同一个坐标系中。

于 2013-04-28T22:12:59.213 回答
0

数组正在使用boundingBox。

CGRect boundingBoxuser = user.boundingBox;
for (CCSprite *spritecoinleft in Arraycoinleft)
{
    CGRect boundingBoxcoinleft = spritecoinleft.boundingBox;


    if((CGRectIntersectsRect(boundingBoxcoinleft,boundingBoxuser)))
    {

        CCLOG(@"hi....!!");

    }

}
于 2016-01-08T11:37:59.127 回答