«Ожидаемый список спецификаторов-квантификаторов перед b2Body» в XCode - PullRequest
0 голосов
/ 29 декабря 2010

Я пытаюсь извлечь класс из 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
    ...
}

Ответы [ 2 ]

1 голос
/ 31 декабря 2010

Вместо

@property (nonatomic, retain) b2Body* bod;

используйте

@property (assign) b2Body *bod;

, поскольку вы не передаете объект target-c.Директива @synthesize тоже будет работать, поэтому вам не нужно создавать свои собственные методы получения и установки, если вы не хотите делать что-то еще одновременно.

0 голосов
/ 30 декабря 2010

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];
    ...
}
...