0

C++ .mm ファイルである Box2d を使用して Contact Listener を実装しています。

二つの泡が衝突するたびに、何かを実行できるように知りたい. これが私のコードです:

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 に答える