2

こんにちはstackoverflowコミュニティ!

cocos2dを使用してゲームを設計する方法を理解しようとしています。

私の問題は、cocos2dの物理エンジン(私はシマリスについて話している)がスプライトの背後にある世界にあるということです。

スプライトを動かすとき、どうしたらいいのかしら

* 1)背後の物理体に力を加えて動かしている

また

2)コードを介して動きをシミュレートする必要がある場合は、衝突が発生したときにのみ物理を使用します。*


それは私次第だとあなたが言うかもしれないことを私は知っています。しかし、cocos2d iphoneが開発されたときの意図された動作は何でしたか?

よろしくお願いします<3

4

2 に答える 2

3

シマリスシステム内にそれを維持するには、力/インパルスを適用します。自分のコードでスプライトの移動を制御し、ボディをスプライトに追従させてから、ボディの制御をシマリスのシミュレーションに戻す人々の例があります。

かなりの数の人々が、衝突検出にシマリスを使用し、独自のコードでスプライトの動きを完全に制御しています。これは、シマリスのスペースにボディを追加することで実行できますが、スペースに形状を追加することはできません。

これは、このテーマに関するいくつかの議論です。私は新しいユーザーなので、ハイパーリンクとして投稿することはできません。

" http://groups.google.com/group/cocos2d-iphone-discuss/browse_thread/thread/ae37e90eac059135/081da9bcefec76ba?#081da9bcefec76ba "

" http://www.cocos2d-iphone.org/forum/topic/877 "

" http://jeanbombeur.com/content/2009-07-08-synchronizing-sprites-positions-and-rotations-between-chipmunk-and-cocos2d "

ようこそ、頑張ってください!

PS
シマリスモードをオンにする方法もあります。これにより、制御できる範囲が少し自由になりますが、シミュレーションがより現実的になります。

于 2009-09-06T02:58:35.423 に答える
1

形状と一致させたいスプライトの場合、形状を作成するときに、スプライトを形状->データとして結び付ける必要があります。

次に、各形状関数を使用します

cpSpaceHashEach(space-> activeShapes、&functioncallback、data)

shape-> dataを使用するコールバック関数で、スプライトの位置をシェイプにアタッチされたボディの位置に更新できます。

Sprite s = shape->data
[s setPosition:cpv(body->p.x,body->p.y)];

Cocosスケジュールを使用して、cpSpaceStep()およびcpSpaceHashEach()を呼び出します。フレームごとに呼び出さないように注意してください。そうしないと、同期が維持されないという問題が発生します。

私が使う

[self schedule:@selector(step:) interval:(1.0f/60.0f)/3]

このようにして、私のスプライトはすべてチンパンクのデータに従い、私からの余分な作業なしで物理学を実行します。

于 2009-09-06T18:41:04.120 に答える