Cocos2d-x boundingBox问题

时间:2013-08-24 17:06:52

标签: android cocos2d-iphone cocos2d-x cocos2d-android

我正在开发一款适用于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比它看起来要大。当我点击boundingBox附近的某个地方时,它就像我实际点击它一样注册。

请有人帮帮我吗? :)

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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
 }