0

私はCCNodeを構築しています

プロパティがあります:

.h ファイル内

@property (nonatomic) int testProperty;

.mm ファイルにタグを追加し、プロパティを設定します

[[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"Objects.plist"];
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
batchNode = [CCSpriteBatchNode batchNodeWithFile:@"sprite.png"];
[self addChild:batchNode];
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"sprite.plist"];
sprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"%@.png", type]];
[batchNode addChild:sprite];
[sprite setTag:2];                 //SET TAG
[self setTestProperty:10];         //SET PROPERTY
...

また、ContactListenerクラスです。このコードで正しく動作し、タグでボディを検出しています:

#import "ContactListener.h"
#import "Building.h"

void ContactListener::BeginContact(b2Contact* contact)
{
    b2Body* bodyA = contact->GetFixtureA()->GetBody();
    b2Body* bodyB = contact->GetFixtureB()->GetBody();

    Building *buildA = (Building *)bodyA->GetUserData();
    Building *buildB = (Building *)bodyB->GetUserData();
    if (buildA.tag == 2) {
        NSLog(@"Collision with building");
    }
}

問題: ContactListener からプロパティを取得する方法がわかりません

私はそれを取得しようとしました:

if (buildA.tag == 2) {
            NSLog(@"Collision with building");
            NSLog(@"testProperty == %i", buildA.testProperty);
        }

しかし、buildA.testPropertyが機能せず、エラーが発生します

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

説明できる場合は、このクラスからプロパティを取得する方法を教えてください。ありがとう。

4

2 に答える 2

0

ボディを作成するときに、ユーザー データ スプライトに設定します。

建物の中.h

body->SetUserData(self);

問題を解決しました。

于 2012-07-30T16:47:46.997 に答える
0
'-[CCSprite testProperty]: unrecognized selector sent to instance 0x434af0'

建物オブジェクトではなく、ユーザーデータに CCSprite を保存します。

次のようにタグを設定すると、もちろん正しいタグのチェックが機能します。

[sprite setTag:2];

しかし、ユーザー データは建物ではなくスプライトであるため、これは正しくありません。

Building *buildA = (Building *)bodyA->GetUserData();

Building は CCSprite を継承していると思います。これが、タグなどの共通プロパティへのアクセスが機能するのに、Building 固有のプロパティへのアクセスが機能しない理由です。

于 2012-07-30T11:25:58.473 に答える