Evan Pierce

Ranch Hand

Posts: 36

posted 11 years ago

The x and y components of the motion of the sprite are just going to be proportional to the x and y coordinate differences -- i.e.,

delta_x = f(mouse_x - sprite_x)

delta_y = f(mouse_y - sprite_y)

Where delta_x/y are the amounts to add to the x and y coordinates of the sprite in each frame of animation, mouse_x/y are the mouse coordinates, sprite_x/y are the sprite's coordinates, and f() is some function that determines the speed of motion -- it might be "divide by 5, rounding up", for example.

The actual angle isn't as useful, but if you truly need it, it's

angle_in_radians = Math.atan((mouse_y - sprite_y)/(mouse_x - sprite_x))

you need to be careful of that potential divide-by-zero; if the denominator is 0, then the angle is either 0 or pi, depending on the sign of the numerator.

delta_x = f(mouse_x - sprite_x)

delta_y = f(mouse_y - sprite_y)

Where delta_x/y are the amounts to add to the x and y coordinates of the sprite in each frame of animation, mouse_x/y are the mouse coordinates, sprite_x/y are the sprite's coordinates, and f() is some function that determines the speed of motion -- it might be "divide by 5, rounding up", for example.

The actual angle isn't as useful, but if you truly need it, it's

angle_in_radians = Math.atan((mouse_y - sprite_y)/(mouse_x - sprite_x))

you need to be careful of that potential divide-by-zero; if the denominator is 0, then the angle is either 0 or pi, depending on the sign of the numerator.

pascal betz

Ranch Hand

Posts: 547

posted 11 years ago

Math.atan2(deltaY, deltaX) should do the trick. note that first argument is delta Y. it takes care of division by zero problems.