problem with angles in asteroids clone
BlitzMax Forums/BlitzMax Programming/problem with angles in asteroids clone
| ||
the angle accellerates too fast with velocity. is this the right formulea?Function turn(ships:ship) If ships.ang > 360 ships.ang :- 360 If ships.ang < 0 ships.ang :+ 360 If KeyDown(key_left) Then ships.ang:-1 If KeyDown(Key_right) Then ships.ang:+1 If KeyDown(Key_up) Then ships.vel = 0.05 Else ships.vel = 0 End Function Function move(ships:ship) If ships.vel Then ships.xvel:+Cos(ships.ang * ships.vel) If ships.vel Then ships.yvel:+Sin(ships.ang * ships.vel) ships.x:+ships.xvel ships.y:+ships.yvel If ships.vel > 0 Then ships.vel:-1 If ships.x > 640 Then ships.x = 0 If ships.x < 0 Then ships.x = 640 If ships.y > 480 Then ships.y = 0 If ships.y < 0 Then ships.y = 480 End Function |
| ||
If ships.vel Then ships.xvel:+Cos(ships.ang * ships.vel) If ships.vel Then ships.yvel:+Sin(ships.ang * ships.vel) Should no doubt be If ships.vel Then ships.xvel:+ Cos(ships.ang) * ships.vel If ships.vel Then ships.yvel:+ Sin(ships.ang) * ships.vel A couple of observations; testing a float for an exact value, such as if ships.vel is zero, is doomed to failure. Due to the approximate nature of floating point arithmetic you should instead test whether it is close to zero. And in the present case you could simply omit the test. If ships.vel is zero then at worst you waste an infinitesimal amount of time adding zero to two variables. |
| ||
The veeeery small amounts could make up a difference - especially when rendered at "int" positions in a later stage (if done so). So testing for "vel < e" might be fruitful. bye Ron |