0

我正在使用 Box2d 实现一个 Contact Listener,它是一个 C++ .mm 文件。

每当两个气泡碰撞时,我想知道以便执行某些操作。这是我的代码:

void ContactListener::BeginContact(b2Contact* contact)
{

    b2Body* bodyA = contact->GetFixtureA()->GetBody();
    b2Body* bodyB = contact->GetFixtureB()->GetBody();
    if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL)
    {
        BubbleSprite* bNodeA = (BubbleSprite*)bodyA->GetUserData();
        BubbleSprite* bNodeB = (BubbleSprite*)bodyB->GetUserData();

        BOOL oneIsBeingTouched;
        if(bNodeA.isDrag == YES || bNodeB.isDrag == YES) oneIsBeingTouched = YES;
...

BubbleSprite 有property BOOL isDrag指示它们当前是否被用户拖动。我得到的问题是:

    Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'-[CCSprite isDrag]: unrecognized selector sent to instance 0x1ed504a0'

BubbleSprite 是 CCSprite 的子类。isDrag 在其文件中正确声明和合成。有人对发生的事情有任何想法吗?谢谢

4

2 回答 2

1

我建议使用吸气剂,像这样创建你的财产。

@property (nonatomic, assign, getter=isDrag) BOOL dragging;

当然,@synthesize它。现在您可以使用-setDragging:[bNodeA isDrag]。没什么大不了的,但应该使代码更容易理解。

于 2012-06-10T11:46:44.210 回答
0

尝试使用

 if (bNodeA.drag == YES) ...

或者

if ([bNodeA isDrag] == YES) ...
于 2012-06-10T11:02:36.207 回答