0

CCSprite からクラスを派生させて、対応する b2Body へのスプライト参照を格納しようとしていますが、次のエラーが発生しました (コードのコメント)。

BoxSprite.h

#import <Foundation/Foundation.h>
#import "Box2D.h"
#import "cocos2d.h"

@interface BoxSprite : CCSprite {
    b2Body* bod; // Expected specifier-quantifier-list before b2Body
}

@property (nonatomic, retain) b2Body* bod; // Expected specifier-quantifier-list before b2Body

@end // Property 'bod' with 'retain' attribute must be of object type

BoxSprite.m

#import "BoxSprite.h"

@implementation BoxSprite

@synthesize bod; // No declaration of property 'bod' found in the interface

- (void) dealloc
{
    [bod release]; // 'bod' undeclared
    [super dealloc];
}

@end

私はスプライトを作成し、ボディに次のように割り当てたいと思っていました:

BoxSprite *sprite = [BoxSprite spriteWithBatchNode:batch rect:CGRectMake(32 * idx,32 * idy,32,32)];
...
sprite->bod = body; // Instance variable 'bod' is declared protected

次に、次の方法で b2Body にアクセスします。

if ([node isKindOfClass:[BoxSprite class]]) {
    BoxSprite *spr = (BoxSprite*)node;
    b2Body *body = spr->bod; // Instance variable 'bod' is declared protected
    ...
}
4

2 に答える 2

1

それ以外の

@property (nonatomic, retain) b2Body* bod;

使用する

@property (assign) b2Body *bod;

Objective-C オブジェクトを渡していないためです。@synthesize ディレクティブも機能するので、同時に何か他のことをしたい場合を除き、独自の getter および setter メソッドを作成する必要はありません。

于 2010-12-31T01:49:17.243 に答える
0

b2Body は C++ オブジェクトであるため、独自のゲッターとセッターを作成し、BoxSprite.m の名前を .mm ファイルに変更する必要があります。

BoxSprite.h

#import <Foundation/Foundation.h>
#import "Box2D.h"
#import "cocos2d.h"

@interface BoxSprite : CCSprite {
    b2Body* bod;
}

-(b2Body*) getBod;
-(void) setBod:(b2Body *)b;

@end

BoxSprite.mm

#import "BoxSprite.h"

@implementation BoxSprite

-(b2Body*) getBod {
    return bod;
}

-(void) setBod:(b2Body *)b {
    bod = b;
}

@end

作成:

BoxSprite *sprite = [BoxSprite spriteWithBatchNode:batch rect:CGRectMake(32 * idx,32 * idy,32,32)];
...
[sprite setBod:body];

アクセス:

if ([node isKindOfClass:[BoxSprite class]]) {
    BoxSprite *spr = (BoxSprite*)node;
    b2Body *body = [spr getBod];
    ...
}
于 2010-12-30T00:37:07.313 に答える