2012-05-29 1 views
5

私は別のタイルを与えられた特定のタイルの描画状態を設定する関数を持っています。ドロー状態が描画されるタイルは、それを囲むタイルを比較してそれに応じて更新します。私はvoidを返す関数を抜け出す方法はありますか?

[b] [b] [a] 
[b] [a] [a] 
[a] [a] [a] where a = sand && b = water 

は、bが、それに隣接していることを検出したときの下に、それはそのドロー状態を更新しなければならないことを説明しようとするでしょう。だから私は、大文字、小文字、左の場合、右の場合に機能する関数を持っています。それはなど、右上ケース、右下のケースなど左右ケースを扱うことができるので、私は今ここに私の機能

public override void CompareBorderingTiles(Tile T) 
    { 
     if (T is Water) 
     { 
      float leftBound = location.X - (Tile.TileWidth * Tile.TileScale); 
      float rightBound = location.X + (Tile.TileWidth * Tile.TileScale); 
      float upperBound = location.Y - (Tile.TileHieght * Tile.TileScale); 
      float bottomBound = location.Y + (Tile.TileHieght * Tile.TileScale); 
      if (T.GridLocation.X == leftBound) 
      { 
       drawstate = DrawState.Left; 
      } 
      if (T.GridLocation.X == rightBound) 
       drawstate = DrawState.Right; 
      if (T.GridLocation.Y == upperBound) 
       drawstate = DrawState.Upper; 
      if (T.GridLocation.Y == bottomBound) 
       drawstate = DrawState.Lower; 
     } 

     base.CompareBorderingTiles(T); 
    } 

であることが理由としてかなり説明されるべきであると機能を変更する必要があります私はこの機能を打破したい、あるいはそうでないかもしれない。基本的には私の描画状態が何であるかを示す列挙型を持っています(描画状態は列挙型です)。 正しい描画状態を設定して機能から抜け出せるかどうかは誰にでも分かりますか?

+3

として戻ります:あなたが使用else if呼び出される基本機能が必要な場合は、条件が満たされているときに文があれば、それは残りをチェックしません。あなたの機能を停止したいという意味ですか?もしそれが本当であれば、あなたは 'return;'を使用することができます –

答えて

17

ちょうどあなたが終了するreturnステートメントを使用し

public override void CompareBorderingTiles(Tile T) 
{ 
    if (T is Water) 
    { 
     float leftBound = location.X - (Tile.TileWidth * Tile.TileScale); 
     float rightBound = location.X + (Tile.TileWidth * Tile.TileScale); 
     float upperBound = location.Y - (Tile.TileHieght * Tile.TileScale); 
     float bottomBound = location.Y + (Tile.TileHieght * Tile.TileScale); 
     if (T.GridLocation.X == leftBound) 
     { 
      drawstate = DrawState.Left; 
      return; 
     } 
     if (T.GridLocation.X == rightBound) 
     { 
      drawstate = DrawState.Right; 
      return; 
     } 
     if (T.GridLocation.Y == upperBound) 
     { 
      drawstate = DrawState.Upper; 
      return; 
     } 
     if (T.GridLocation.Y == bottomBound) 
     { 
      drawstate = DrawState.Lower; 
      return; 
     } 
    } 

    base.CompareBorderingTiles(T); 
} 
+0

私はreturnキーワードをそれ自身のように使うことができないことを知りました。ありがとうございます。 –

7

return;を単独で使用すると、すぐに機能から「返されます」。

あなたは本当に帰る必要がありますか?

これにより、今後コードを管理しやすくする必要があります。コード内であなたができる、だから、

return; 

+0

Carlは2秒で競争を勝ち取ります:) – Brady

+0

少なくとも30文字でなければそれは速かったでしょう! :) –

+0

はい私は左上の状態、左下の状態など、グリッド上のタイルの位置に基づいて設定する必要があるため、私はすべきだと思います。 –

7

あなたはreturnと機能を終了することができます。

+0

ああ、自分で帰還キーワードを使うことができなかったことは分かっていましたが、今は馬鹿のように感じます。ありがとうございます。 –

3

return;は、関数の任意のポイントで使用できますが、その関数はそのままになります。リターンを使用すると、ではなくが呼び出されます。

public override void CompareBorderingTiles(Tile T) 
    { 
     if (T is Water) 
     { 
      float leftBound = location.X - (Tile.TileWidth * Tile.TileScale); 
      float rightBound = location.X + (Tile.TileWidth * Tile.TileScale); 
      float upperBound = location.Y - (Tile.TileHieght * Tile.TileScale); 
      float bottomBound = location.Y + (Tile.TileHieght * Tile.TileScale); 
      if (T.GridLocation.X == leftBound) 
      { 
       drawstate = DrawState.Left; 
      } 
      else if (T.GridLocation.X == rightBound) 
       drawstate = DrawState.Right; 
      else if (T.GridLocation.Y == upperBound) 
       drawstate = DrawState.Upper; 
      else if (T.GridLocation.Y == bottomBound) 
       drawstate = DrawState.Lower; 
     } 

     base.CompareBorderingTiles(T); 
    } 
+0

これは、 'base'関数を呼びたくないとしても、それをelseにラップするだけです。これらの 'else if'は、多くの' return'sが点在するよりずっと簡単です。 – Rawling

+0

あなたは2秒で私を倒す –

0

使用return; 機能のボイド

関連する問題