1

私は空間に体のあるシマリスの形をしています。体を配置して、重力などで落下させないように、空間から体を取り除きます。この体を動かせるようにする必要があるので、静止させません。

シーン内の Cocos2D スプライトの位置 + オフセットに従ってボディの位置を更新する必要があります。

私は体の位置を次のように設定しています:

collShape->body->p = collSprite.position; - これは動作しないようで、コンパイル エラーではなく、実行されますが、衝突形状は移動しません。

tick メソッドでスプライトの位置に基づいて衝突体を移動することは可能ですか?

4

2 に答える 2

0

cpSpaceStep を呼び出すと、アクティブな形状のリストが作成され、それぞれに対して cpShapeUpdateFunc が呼び出されます。その関数は次のようになります。

void
cpShapeUpdateFunc(cpShape *shape, void *unused)
{
    cpBody *body = shape->body;
    cpShapeUpdate(shape, body->p, body->rot);
}

...これにより、シェイプが接続されているボディの位置と回転に合わせて更新されます。それが起こらない場合は、あなたの形がスペースに追加されていないか、体に追加されていない可能性がありますか?

于 2013-02-03T00:20:44.053 に答える
0

あなたがしていることは可能であるべきです。

最もクリーンな方法は、CCSprite から派生した新しいクラスを作成し、setPosition メソッドをオーバーライドしてスプライトの本体を更新することです。

これの利点は、スプライトの位置が (明示的に、または任意のアニメーション シーケンスによって) 変更されるたびに、シマリスのボディが自動的に更新されることです。

-(void) setPosition:(CGPoint) p{
    [super setPosition:p];
    if (self->body != nil) {
        self->body->p.x = p.x;
        self->body->p.y = p.y;
        //Note: also call cpSpaceRehash to let Chipmunk know about the new position
    }
}
于 2011-01-20T10:14:19.300 に答える