発射物シューティングゲームを開発しています。
ゲームの基本的な構造は、矢印キーを使用してユーザーが戦車を操作することです。画面の右側から敵が入り、戦車に向かって歩き始めます。戦車は発射体のロケットを発射し、敵に命中した場合、敵が戦車に到達した場合にユーザーが得点します。
-戦車の動きは、メイン関数で作成された「hero」という名前の OpenGL または C++ オブジェクトである Animated_Sprite クラスを使用して実装されます。-敵の動きも、スプライトシートを異なるフレームにスライスする同じ Animated Sprite クラスを使用して実装されます。フレームは、Update_Sprite_Animation() 関数を使用してオブジェクトのモーション中に変化します。したがって、「enemy」オブジェクトは、メイン関数で作成された Animated_Sprite クラス オブジェクトでもあります。・戦車の動きに合わせて背景も逆方向に動きます。
-主な問題(私にとって)-ロケット(タンクの位置から発射される Box2d Circle シェイプ)は Animated_Class オブジェクトではなく、次のように作成されます。
b2Body* addCircle(int x,int y,int r,bool dyn=true){...}
void drawcircle(b2Vec2 center,float r,float angle){...}
b2Body *mycircle;
float speed=6,angle=300*3.141/180; ...
次に、box2d の「mycircle」ボディに線形速度を適用して、次のようなロケット (円) の発射体の動きを取得しました。
void mouse( int button, int state,int x,int y)
{
if(state==GLUT_DOWN)
{
mycircle=addCircle((hero->x)-5,(hero->y)+3,8,true);
b2Vec2 vector = speed * b2Vec2(cos(angle), -sin(angle));
mycircle->SetLinearVelocity(vector);
}
}
-私が読んだことから、Box2dでは、オブジェクト間の衝突は、さらに2つのオブジェクトを作成し、次のような連絡先リストを取得することによってチェックされます:
for (b2Contact* contact = world->GetContactList(); contact; contact = contact->GetNext())
contact->... //do something with the contact
-ヒーローと敵は b2body オブジェクトではなく、Animated_Sprite クラスのオブジェクトなので、どうすればよいでしょうか? Animated_Sprite クラス オブジェクトを型キャストして b2body オブジェクトを取得できますか? または、新しい b2body オブジェクトを作成して、ヒーローまたは敵オブジェクトの参照を与える必要がありますか? はいの場合は、私を案内してください。それとも、新しい b2body オブジェクトを作成して、ヒーローと敵のすべてのフィクスチャを与える必要がありますか? b2world の外にある独自のクラス オブジェクトと、box2d の円形などの b2body オブジェクトとの間の衝突を検出する方法が必要ですが、私はこれに非常に慣れておらず、何をすべきかわかりません。
-ヒーローと敵を Box2d ボディとして実装しない理由: Animated_sprite クラスのアニメーションを b2body オブジェクトに実装する方法がわからないため & 発射体のモーションに box2d を使用している理由は、実装方法がわからないためです生の OpenGL を使用します。
Box2d のコリジョンに関するマニュアルは時間がかかりすぎて読めません。
b2body オブジェクトと b2world 外のオブジェクト、つまり通常の c++ Opengl オブジェクトの間の衝突を検出できるようにするにはどうすればよいか教えてください。