2016-04-22 10 views
0

まあ、私は線の傾きを計算しようとしていますが、当然、点が未定義になるときは、ゼロで除算しようとするときです。さて私は、tryキャッチでこれを処理し、それでもゼロ誤差による除算を得るのではなく、...予想外の場所に...ここ ゼロ誤差による奇妙な除算

はコードです:

private void tmrEnemyMovement_Tick(object sender, EventArgs e) { 
     for (int i = 0; i < enemies.Count; i++) { 
      int eneX = enemies[i].GetEnemyWorldPosX(); 
      int eneY = enemies[i].GetEnemyWorldPosY(); 
      int playerX = player.GetPlayerWorldPosX(); 
      int playerY = player.GetPlayerWorldPosY(); 

      double slope = -100000000; 
      try { 
       slope = (GetDistanceBetween(eneY, playerY))/(GetDistanceBetween(eneX, playerX)); 
      } catch (DivideByZeroException) {//Division by Zero Exception is handled here. 
       slope = GetDistanceBetween(eneY, playerY)/1; 
      } 

      int multiplicative = 1; 

      int rise = 1;//Convert.ToInt32(slope * multiplicative); 
      int run = multiplicative; 
      Text = Convert.ToSingle(slope) + ""; 

      if (enemies[i].GetEnemyWorldPosX() < player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() > player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 2 
       enemies[i].MoveEnemyTo(run, rise, "+-"); 
      } else if (enemies[i].GetEnemyWorldPosX() < player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() < player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 3 
       enemies[i].MoveEnemyTo(run, rise, "+-"); 
      } else if (enemies[i].GetEnemyWorldPosX() > player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() > player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 1 
       enemies[i].MoveEnemyTo(run, rise, "-+"); 
      } else if (enemies[i].GetEnemyWorldPosX() > player.GetPlayerWorldPosX() && enemies[i].GetEnemyWorldPosY() < player.GetPlayerWorldPosY()) {//Enemy Resides in Quadrant 4 
       enemies[i].MoveEnemyTo(run, rise, "--"); 
      } 
     } 
     Bitmap bmp = map.GetMap() as Bitmap; 

     using (Graphics drawEnemy = Graphics.FromImage(bmp)) { 
      for (int i = 0; i < enemies.Count; i++) { 
       drawEnemy.DrawImage(enemies[i].getSprite(), new PointF(enemies[i].GetEnemyWorldPosX(), enemies[i].GetEnemyWorldPosY())); 
      } 
     } 
    } 

そして、いくつかの奇妙なためその理由は、私は本当に私を助けてdoesntの奇妙な場所にこれを取得する:picture

次のようにこのメソッドが定義されている:

private int WorldPositionY = 0; 

public int GetEnemyWorldPosY() { 
    return WorldPositionY; 
} 

あなたは、そのシンプルなゲッターを見ることができるので、なぜ私は通りゼロエラー#1による除算、tryキャッチで処理されたときの除算、この行の#2を得ていますか? 私は何かを逃したことがありますか?

**編集:ここで** は、スタックトレースは次のとおりです。 enter image description here

+0

最適化を無効にしていますか? – Rob

+0

現在、私はこれをデバッグモードで実行しています。 – BlazeXenon

+0

完全なスタックトレースを表示できますか? – Zong

答えて

4

は、プログラムを再コンパイルし、デバッグモードになっていることを確認してください。また、傾きの計算にtry/catchを使用しないでください。このサテライトは非常に長くなります。使用

var distanceX = GetDistanceBetween(eneX, playerX); 
if (distanceX != 0) 
    slope = GetDistanceBetween(eneY, playerY)/distanceX; 
else 
    slope = GetDistanceBetween(eneY, playerY); 

この例外は重要ではありません。続行を押し続けることができます。または、処理された例外を無効にすることができます(デバッグ - >例外 - >共通言語ランタイムでユーザーの処理をチェックしないでください)。または、デバッガを接続せずにプログラムを実行することもできます(Ctrl + F5キーを使用)。

+0

まあ、奇妙な理由のために、私の試行はdidnt仕事をキャッチしますが、if else文は....ちょっと変わったけど、決して助けてくれてありがとう! – BlazeXenon