2017-09-10 2 views
1

私は単純なゲームを作って衝突を加えました。私のプレイヤーは窓の外に出ないようにしました。それは働きました。壁を作って衝突を起こしたいと思っていましたが、動きませんでした。 方法はありますか? "プレーヤー"が壁を通って行くのを止める方法はありますか?「プレーヤー」と「壁」との衝突を実装するにはどうすればよいですか?

運動コード:

  if(e.KeyCode == Keys.A) 
     { 
      left = true; 
     } 

     if (e.KeyCode == Keys.D) 
     { 
      right = true; 
     } 

     if (e.KeyCode == Keys.W) 
     { 
      up = true; 
     } 

     if (e.KeyCode == Keys.S) 
     { 
      down = true; 
     } 
    } 


    private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     #region Stop controls 
     if (e.KeyCode == Keys.A) 
     { 
      left = false; 
     } 

     if (e.KeyCode == Keys.D) 
     { 
      right = false; 
     } 

     if (e.KeyCode == Keys.W) 
     { 
      up = false; 
     } 

     if (e.KeyCode == Keys.S) 
     { 
      down = false; 
     } 
    } 

私の外壁衝突:現在、あなたは外壁の座標の選手だけでなく、境界を決定する整数値を使用しているかのように私はそれを読ん

  if (right == true) 
     { 
      if (player.Left >= level.Width - player.Width) 
      { 
       player.Left = level.Width - player.Width; 
      } 
      else 
      { 
       player.Left += speed; 
      } 
     } 

     if (left == true) 
     { 
      if (player.Left <= level.Left) 
      { 
       player.Left = level.Left; 
      } 
      else 
      { 
       player.Left -= speed; 
      } 
     } 

     if (up == true) 
     { 
      if(player.Top <= level.Top) 
      { 
       player.Top = level.Top; 
      } 
      else 
      { 
       player.Top -= speed; 
      } 
     } 

     if (down == true) 
     { 
      if (player.Top >= level.Bottom - player.Height) 
      { 
       player.Top = level.Bottom - player.Height; 
      } 
      else 
      { 
       player.Top += speed; 
      } 
     } 

答えて

1

壁の形を実現するためにできることは、2D配列を使用することです。

座標系を模倣するために、配列内の配列です。

これらの配列座標のそれぞれに "CellInformation"オブジェクトを保持させることができます。

CellInformationオブジェクトは、歩行可能かどうかを知ることになります。たとえば、プレーヤが座標(4,4)にあり、左に移動しようとすると(3,4)、配列4を選択します配列3、オブジェクトをそこから取って歩くことができるかどうか質問し、そうであれば、新しい座標を(3,4)に設定します。

また、木材、水、溶岩、泥、森林地帯、敵が存在する場合などは、各セルにさまざまな情報を追加できます。 2Dアレイ上

詳細はこちらから答えをhttps://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/multidimensional-arrays

+0

おかげで、あなたはグリッドの右側のいくつかの並べ替えを意味ですか? しかし、「プレーヤー」は自由に移動し、「グリッド」のような制限はありませんか? –

+0

私のプレイヤーは幅が1ピクセル、高さが1ピクセルしかありません。いいえ? –

+0

はい、グリッドとして機能します。 純粋にC#またはゲームエンジンの中で作っていますか? 純粋にC#で作成し、プレイヤーの位置を変数で設定するだけの場合は、設定したもの以外の制限はありません。 グリッドの外側部分を外側境界壁として定義することができます。これは、各セルのために定義した設定と共に、プレーヤーがどこで歩くことができるか、そしてそのように、彼の移動制限を決定します。 – Doh09

関連する問題