Tell me more ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

I'm attempting to implement a camera in my game. I had it working 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 to the Body.

I use this code that currently is not working as it should:

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 what I attemp to do is take the transform and alter it 
// by the viewportX and Y, which is something like **-240, -150**. 
// Why is it negative? Because an object has coordinates 500, 300 would be displayed
// at 160, 150 when the subtraction is done. 
// With the DrawUtils.toScale(), it's just how I convert the 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 for a fact that the following method works 100%. It correctly displays 
// my object, just that it doesn't follow it.
for (Fixture f = m_body.getFixtureList(); f != null; f = f.getNext())
    DrawUtils.drawShape(f, xf);
}

Hopefully I didn't over comment this and you understand my problem. I don't want to alter the actual physics position of the object, I just want to display it in the center.

share|improve this question
 
You want to move you object graphical but not its physical location? –  ClassicThunder Jul 16 at 2:25
 
Yes. But I don't actually want to move it. I just want to represent it relative to the screen rather than relative to game/world/map, whatever you want to call it. –  user1264811 Jul 16 at 2:40
1  
You shouldn't have your drawing logic tied to your physics data. The drawing data should simply pull positional data from Box2D but be able to render if Box2D didn't exist. Box2D is designed as a simulator and the further you get away from that (teleporting objects around and back to draw them) the more issues you are going to run into. Having both your objects and the Box2D ones are best with your objects simply pulling from the simulated ones Box2D is handling. –  ClassicThunder Jul 16 at 13:54
 
I'm not teleporting anything. Like I said, I'm just drawing it relative to the screen. This is a camera object. Nothing is being moved, the graphical representation is simply being adjusted so that it is in the middle of the screen. –  user1264811 Jul 16 at 21:59

1 Answer

Apparently my method wasn't too far off. Here are is adjustment:

Vec2 n = xf.p.sub(new Vec2(DrawUtils.toScale(-viewportX), DrawUtils
            .toScale(-viewportY)));
xf.set(n, xf.q.getAngle());
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.