0

プラットフォームタイプのゲームを作っています。Rectangleクラスとプラットフォームを使用して、メインキャラクターを長方形にしました。プラットフォームは常に画面上を上に移動しており、キャラクターがプラットフォームの上部に衝突したときに、プラットフォームと同じ速度で着地して移動するようにします。そうしないと、落下するはずです。落下部分を除いて、すべてが機能しました。落下をオンにすると、プラットフォームに留まることはありませんが、落下をオンにすると、正常に動作します。基本的に、キャラクターはプラットフォームに着地しない限りずっと落下していると想定されており、その場合、そのy方向/速度はプラットフォームの方向/速度に変わるはずです。

これがコードのその部分です。プラットフォームと衝突しないときにキャラクターを落下させる方法についてのヘルプは素晴らしいでしょう。私が知りたいより良い方法があれば、私がしていることがこれを行うための最も効率的な方法ではないかもしれないことを私は知っています。私はxnaを初めて使用しますが、java / c#を知っています。

            Rectangle playerRec = new Rectangle((int)player.position.X, (int)player.position.Y,player.width, player.height);
        foreach (Platforms platform in platforms)
        {
            Rectangle platformRec = new Rectangle((int)platform.position.X, (int)platform.position.Y, platform.width, platform.height);
            if ((playerRec.Intersects(platformRec) && (playerRec.Y + playerRec.Height) - platformSpeed < platformRec.Y) &&
                (playerRec.X < platformRec.X + platformRec.Width && playerRec.X + playerRec.Width > platformRec.X))
            {
                gravity = 0;
                player.position.Y -= platformSpeed;

            }
            else if(player.position.Y != platform.position.Y)
            {
                gravity = 5;
                //player.position.Y += gravity;
            }
4

2 に答える 2

3

あなたの問題は、交差点にぶつかったときにループから抜け出していない可能性が最も高いです。毎回すべてのプラットフォームをループしているので、1 つが交差すると重力 = 0 になりますが、次のプラットフォームをチェックすると重力が再び 5 になります。

ループを再構築するか、この 2D 物理エンジンをチェックアウトして、このほとんどのものを処理する必要があります。

http://farseerphysics.codeplex.com/

于 2011-12-24T06:18:06.083 に答える
0

マイクロソフトには、落下して衝突するプラットフォーマーのサンプルがあります。これは学ぶのに最適なサンプルであり、これを行うためにサードパーティの物理エンジンは必要ありません。

于 2011-12-24T06:43:02.247 に答える