2011-12-04 11 views
0

私は、複数のボディで構成されたカスタムのcocos2dとbox2dオブジェクトを作成しようとしています。カスタムcocos2d/box2dオブジェクトの作成

オブジェクトを2つのボディと1つのスプライトで構成します。これは私が作成したヘッダーファイルです:

@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?私は何か不足していますか?

答えて

0

デザインが良いです。個人的には私はCCNodeのサブクラス化にも同じ理由で、CCSpriteが複数のCCSpriteを含む必要があるかどうかを決して知りません。したがって、CCNodeクラスはコントローラになり、CCSpriteクラスや他のクラスはViewとして扱われます。この場合、b2Bodyがモデルになります。

あなたのエラーは、あなたのクラスの設計とは関係ありません。コードはまだ動作していますか、それともクラッシュしますか?たぶんそれは無視できる多くのメッセージの1つです。

通常、Box2Dコードを追加する際の注意点があります。すべてのクラスでBox2Dコードを直接使用していない場合でも、.mm拡張子を使用する必要があります。

+0

私のbox2dコードではエラーでした:)正しいデザインの確認がしばしばエラーを特定するのに役立つと思われます。このようなクラスを作成すると、いくつかの強力なデザインオプションが可能になります! – Alex

関連する問題