Reputation: 40
Well, im trying to calculate slope of a line, and naturally, when a point becomes undefined is when you try to divide by zero. Well I handle this in a try catch and but still getting a division by zero error, but in a rather... unexpected spot...
Here is the code:
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()));
}
}
}
And for some strange reason, I get this in a weird spot which doesnt really help me:
This method is defined as follows:
private int WorldPositionY = 0;
public int GetEnemyWorldPosY() {
return WorldPositionY;
}
As you can see, its a simple getter, so why am I getting a division by zero error #1 at all, when it is handled in a try catch, and #2 on this line? Have I missed something?
**EDIT: **
Here is the stack trace:
Upvotes: 0
Views: 324
Reputation: 1575
Try to recompile your program and ensure you are in Debug mode. Also do not use try/catch for calculating slope - this satement is very long. Use
var distanceX = GetDistanceBetween(eneX, playerX);
if (distanceX != 0)
slope = GetDistanceBetween(eneY, playerY) / distanceX;
else
slope = GetDistanceBetween(eneY, playerY);
And this exception you caught is not critical. You can press Continue and go on. Or you can switch off handled exceptions (uncheck user-handled in Debug->Exceptions->Common Language Runtime). Or you can run your program without attached debugger (use Ctrl+F5).
Upvotes: 4