I’m developing a tube shooter-esque game in java that simulates 3D without actually using any 3D libraries. Right now I have a player-controlled ship that rotates around the center point of the screen, using (in this case, for moving right).
angle += 0.1;
x = Math.cos(angle) * radius + cX;
y = Math.sin(angle) * radius + cY;
Where angle is the placement in relation to the center point (ex. 270 is directly under the center), x and y are the current ship position, radius is the distance from the center, and cX and cY are the center point’s location.
Right now revolving around the point works smoothly, but I’m not sure how to handle rotating the actual ship to always point towards the center. I’ve looked around a lot online but can’t figure out how an individual Image (or if that doesn’t work, an array of drawLines) can be rotated without affecting other objects on the screen.
Long story short, how would one go about rotating an individual Image to constantly point towards a remote x,y location?
What you need is the
AffineTransformclass which is basically a matrix class in java.Graphics2Dhas a draw image variant which accepts anAffineTransforminstance:To create a transform, you can use 2D matrix operations:
Mind that the order is important, probably you will want to scale first, rotate and then traslate the image to the corresponding location. It should do fine.
Java has uses some 3D power to draw as fast as it can, it is faster than a software renderer, but quite far from native opengl.