Finding a point on a rotated sprite

Started by
1 comment, last by oliii 19 years, 7 months ago
Hi, im new :) now i just know that when i look back into this thread ive probably been flamed in more ways than possible but heck, if i dont figure this out soon i will probably commit suicide anyway. Im using allegro :), im new to making games, this is my secound. Its just a simple 2d 'drive your tank and shoot your friend' game. Ive got them to drive fine, and ive got them to fire... its just- not out of the tanks cannon ^^; as i expected it to, it comes out of the bmps co-ordinates i need to find a formula to find the point of the cannon on my bmp, originally i thought of finding the centre by diving the height and width by 2 and going from there, but the bmp isnt a square. and because ive got my tanks rotating i have no idea how to get the point i want. if any1 knows any tutorials or anything of help to me that would be gr8, thx! and may you have mercy on my soul, flame wise :s
Advertisement
http://www.icarusindie.com/DoItYourSelf/rtsr/&#106avascript3d/lesson2.php<br><br>It's in &#106avascript but the math is the same and the language is easy enough to understand if the tutorial isn't clear enough.<br><br>I think that's what you need to know. You know the original location of the cannon point (same as in the BMP), that tutorial covers the rotation math that you need to figure out where that point is as it's rotating around your player's position.<br><br>You then use that unit vector (from the center of rotation to the cannon) to figure out the component velocities for your bullet so that it moves in the proper direction.<br><br>
to place a point local to a sprite (meaning, inside the sprite texture) into the world (meaning, on screen), it's

Vector Psprite_centre = Vector(sprite_width/2, sprite_height/2);Vector dPlocal        = (Plocal - Psprite_centre);Vector dPworld        = RotatePoint(dPLocal, sprite_angle));Pworld                = Psprite_pos + dPworld;Vector RotatePoint(Vector Point, float angle){    float co = cos(angle);    float si = sin(angle);    Vector P = Point;    P.x = Point.x * ( co) + Point.y * (si);    P.y = Point.x * (-si) + Point.y * (co);        return P;}


this is assuming the centre of rotation is the centre of te sprite (Psprite_centre).

Psprite_pos is the position of the centre of the sprite on screen.

the rest should be straight forward.

as an sidenote, to do the reverse (convert a sprite from screen into the texture), you simply do the exact reverse process.

Vector dPworld        = Pworld - Psprite_pos;Vector dPlocal        = RotatePoint(dPworld, -sprite_angle);Vector Psprite_centre = Vector(sprite_width/2, sprite_height/2);Vector Plocal         = dPlocal + Psprite_centre;

Everything is better with Metal.

This topic is closed to new replies.

Advertisement