0

我正在为 Android 开发 cocos2d-x 游戏,但遇到了问题。

    _hammer = CCSprite::createWithSpriteFrameName("Hammer.png");
    _hammer->setPosition(ccp(_screenSize.width * 0.5f - 4*((_hammer->getContentSize().width) * 0.15f), _screenSize.height * 0.055f ));
    _hammer->setVisible(true);
    _hammer->setScale((_screenSize.width / _hammer->getContentSize().width) * 0.15f);
    _hammer->setScale((_screenSize.height / _hammer->getContentSize().height) * 0.15f);
    _hammerSelected = true;


 {
    CCTouch *touch = (CCTouch *) pTouches->anyObject();
    CCPoint location = touch->locationInView();
    location = CCDirector::sharedDirector()->convertToGL(location);
    if ((CCRect::CCRectContainsPoint(_hammer->boundingBox(), location))) {
    //do something
    }

我打开了 CC_SPRITE_DEBUG_DRAW 和 CC_SPRITEBATCHNODE_DEBUG_DRAW,问题是 boundingBox 比看起来要大。当我单击边界框附近的某个位置时,它会注册,就好像我实际上在其中单击一样。

请问谁能帮帮我?:)

4

2 回答 2

3

边界框的矩形与图像的内容大小相同。它包含图像的 alpha 区域。

您可以使用“TexturePacker”之类的工具来修剪图像,然后在加载后使用getTextureRect来获得最小的矩形。

于 2013-08-27T12:40:41.263 回答
0

尝试这个:

 CCRect rect= _hammer->boundingBox();

 //multiply the scale value.
 rect.size.height*= _hammer->getScaleX();
 rect.size.width*= _hammer->getScaleY();

 if ((CCRect::CCRectContainsPoint(rect, location))) {
 //do something
 }
于 2014-04-04T13:23:16.130 回答