Создание собственного объекта cocos2d / box2d - PullRequest
0 голосов
/ 04 декабря 2011

Я пытаюсь создать собственный объект cocos2d и box2d, состоящий из нескольких тел, и мне нужно немного помочь со структурой.

Я хочу, чтобы объект состоял из двух тел и одного спрайта.Это заголовочный файл, который я создал:

@interface NewBlock : CCNode {
    CCSprite *sprite;
    b2Body *body1;
    b2Body *body2;
    b2World *world;
}

Так что я наследую от CCNode, который, как я полагаю, является правильным.Вот мой метод реализации:

-(id)initWithWorld:(b2World*)theWorld atLocation:(CGPoint)location {
  if (self = [super init]) {

    sprite = [CCSprite spriteWithFile:@"level_2.png"];

    ...box2d stuff...

    [self addChild:sprite];
  }   
return self;
}

И в сцене, где я хочу объект, я бы создал его следующим образом:

NewBlock *block = [[NewBlock alloc] initWithWorld:world atLocation:ccp(100,100)];
[self addChild:block];

Я знаю, что могу наследовать от CCSprite, но яможет потребоваться добавить больше спрайтов к объекту в какой-то момент, поэтому для меня будет полезен более общий пример.

Я попробовал пример с приведенным выше кодом и получил следующее сообщение в консоли:

sharedlibrary apply-load-rules all
Current language:  auto; currently c++

Правильна ли моя структура для создания собственного объекта cococs2d / box2d?Я что-то упустил?

1 Ответ

0 голосов
/ 05 декабря 2011

Дизайн хороший.Лично я предпочитаю использовать подклассы CCNode по той же самой причине: вы никогда не знаете, когда вашему CCSprite нужно содержать несколько CCSprite.Таким образом, класс CCNode становится контроллером, а CCSprite и другие классы рассматриваются как представление.В этом случае b2Body будет моделью.

Ваша ошибка не связана с тем, как вы проектировали класс.Код все еще работает, или он падает?Возможно, это одно из многих сообщений, которые можно игнорировать.

Обычные предостережения применяются при добавлении кода Box2D.Все ваши классы должны использовать расширение .mm, даже те, которые могут не использовать код Box2D напрямую.

...