I'm implementing a camera in my game. It worked for regular objects, but I began using Box2D and obviously things changed a bit. I have a Body object that I want to draw at the center of the screen. Basically what I'm doing is subtracting the viewportX and viewportY from the Body's position.
The relevant code:
public void paint(Graphics2D g, int viewportX, int viewportY) { Transform xf = new Transform(); // m_body is the Body object xf.set(m_body.getTransform()); // Here I attempt to take the transform and alter it by the viewportX and // Y, which are something like (-240, -150). It's negative because an // object at (500, 300) would be displayed at (160, 150) after the // subtraction. DrawUtils.toScale(), is just how I convert units from // JBox2D units to my units. Vec2 v = Transform.mulTrans(xf, new Vec2(DrawUtils.toScale(-viewportX), DrawUtils.toScale(-viewportY))); // Set the new transform to the new vector. Keep the old angle. xf.set(v, xf.q.getAngle()); g.setColor(Color.white); // I know the following method works correctly. It displays my object, // just doesn't follow it. for (Fixture f = m_body.getFixtureList(); f != null; f = f.getNext()) DrawUtils.drawShape(f, xf); } I don't want to alter the actual physics position of the object, just its graphical position such that it's displayed it in the center.