2016-03-20 11 views
1

私はブロックと溶岩とキャラクターを持っているこのプラットフォーマーのゲームを持っています。私は13歳であり、C#で経験が豊富ではないことを覚えておいてください(私はC#と.NETを約8ヶ月使っています)。これはブロックを検出するためのコードです:プラットフォームゲーム:キャラクターがあまりにも速く落ちる

bool onGround = false 
const int G = 5; 
foreach (Block block in blocks) 
{ 
     while (!(characterRectangle.Intersects(block.Rectangle))) 
     { 
      location.Y += G; 
      break; 
     } 

     onGround = characterRectangle.Intersects(block.Rectangle); 
} 

問題がありますか?キャラクターが速すぎます。より多くのブロックがあるほど、速く落ちます。さて、私はこれがforeachループのためであることを知っていますが、これに対する解決策は何ですか。

+1

おそらく 'if(!blocks.Any(block => characterRectangle.Intersects(block.Rectangle)))'? –

答えて

1

重力の場合のように、ほとんどのゲームでは、衝突検出フェーズ中にプレーヤーを移動させませんでした。代わりに、衝突検出ループの前にプレーヤーを下に動かします。衝突検知中に何かに衝突している場合は、に戻して、もはや衝突しなくなります。

http://gameprogrammingpatterns.com/contents.html、金鉱をチェックしてください:)。

0

このコードはいつ呼び出されますか?

私が気づいた最初のこと: いつもbreak;を呼び出すので、whileループは多かれ少なかれ役に立たない。 whileループを終了します。あなたは "if"節を使うこともできます。

また、「場所」とは何ですか?これはプレイヤーの場所ですか?はいの場合、Y値はblocksにあるブロックごとにGずつ増加します。したがって、より多くのブロックがそのblocksコレクションに含まれていると、プレイヤーは速く落ちます。

関連する問題