2012-03-23 5 views
0

私はこれを初めて使っていて、手がかりがありません。今はかなり読んだことがありますが、どういうわけか彼らはすべてこれを説明していないようです。obj-c弱いリンクなどで亡くなった

私はゲームに取り組んでいますが、どういうわけかこれで迷ってしまいます。

GameScene.hはの界面での次の宣言を持っています(BOX2Dを使用して、そう.mmを必要とする)GameScene.mm内部

Player *player; 
b2Body *b2PlayerBody; 

機能で、私は別のクラスから来ているプレーヤーを(作成します)私は使用したボディにこのb2PlayerBodyを設定し、それをプレーヤクラスにプッシュして操作します。

- (void)update:(ccTime)dt withBody:(b2Body *)body; 

とのためdeclatration :

[player update:dt withBody:b2PlayerBody]; //update player 

player.hファイルで、私が持っている:私は呼んで、このファイルの私の更新方法では

-(void) addPlayerAtPosition:(CGPoint)p 
{ 
    CCLOG(@"Adding player at %0.2f x %02.f",p.x,p.y); 

    // Player 
    player = [[Player alloc] initWithPosition:ccp(p.x, p.y)]; 
    player.anchorPoint = ccp(0,0.5); 
    [self addChild:player z:10 tag:kTagPlayerNode]; 



    // Define the dynamic body. 
    //Set up a 1m squared box in the physics world 
    b2BodyDef bodyDef; 
    bodyDef.type = b2_dynamicBody; 
    bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO); 
    b2PlayerBody = world->CreateBody(&bodyDef); 

    // Define another box shape for our dynamic body. 
    b2PolygonShape dynamicBox; 
    dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box 

    // Define the dynamic body fixture. 
    b2FixtureDef fixtureDef; 
    fixtureDef.shape = &dynamicBox; 
    fixtureDef.density = 1.0f; 
    fixtureDef.friction = 0.3f; 
    b2PlayerBody->CreateFixture(&fixtureDef); 
    [player setPhysicsBody:b2PlayerBody]; 
} 

は、(dtはデルタです) player.mmファイルがあります。

- (void)update:(ccTime)dt withBody:(b2Body *)body { 

} 
起動すると

、それは私が間違って何をやっている

[player update:dt withBody:b2PlayerBody]; //update player 

任意のエラーテキストなしGameScene.mmからの更新にクラッシュしますか?

はまた誰かが(これは愚かな質問であれば申し訳ありません)の違いは何であるか私にepxlainできb2PlayerBody * b2Body

間; b2Body * b2PlayerBody; //これは弱いリンクであることは分かっていますが、diffは何ですか? b2Body b2PlayerBody;

また、これらのリンク方法は、リリースメソッドのメモリ解放に影響しますか?なしメモリ管理キーワード(それぞれ「割り当てる」プロパティ)で

+0

私は(b2Body *)body {(メソッド内では(b2body *)}をinitで...解決しています...まだ知りたい... – renevdkooi

答えて

-1
b2Body * b2PlayerBody; 
b2Body* b2PlayerBody; 
b2Body *b2PlayerBody; 

インスタンス変数(この場合はポインタが)「弱い参照」と呼ばれています。アスタリスクの配置は違いはなく、あなたが好むスタイルを純粋に考慮する必要があります。個人的には、変数ではなく、データ型の横にあるアスタリスクを使用します。

弱いリンクは静的ライブラリのみを意味します。つまり、Game Centerのないデバイスでアプリケーションを実行できるように、Game Centerとの弱いリンクが可能です。その場合、アプリケーションがGCなしのデバイスでGCメソッドを呼び出さないようにする必要があります。

これらの宣言はメモリ管理には影響しません。必要に応じてインスタンス変数の割り当てと解放を行います。この場合は、Box2D APIを介して、つまりCreateBodyメソッドとDestroyBodyメソッドを介して行われます。

+0

ARCでは、インスタンス変数は弱参照ではなく、デフォルト'__strong'参照に変換します。これは、将来ARCを学ぶ人にとっては非常に混乱し、 '__weak'と' weak link'の間で混乱するかもしれません。だから私はこの質問は私の好みのために十分な明快さを持っていないので、私は投票します。 –

関連する問題