I am using Transform.translate to move my objects around (is that expensive? Should I use setX/Y instead?) and came across the following bug:
Code:
package com.shade;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Circle;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.geom.Transform;
public class TestCase extends BasicGame {
Shape player;
public TestCase() {
super("Translate test case");
}
@Override
public void init(GameContainer container) throws SlickException {
player = new Circle(300, 240, 20);
}
@Override
public void update(GameContainer container, int delta)
throws SlickException {
if (container.getInput().isKeyDown(Input.KEY_LEFT)) {
Transform t = Transform.createTranslateTransform(-2, 0);
player = player.transform(t);
}
if (container.getInput().isKeyDown(Input.KEY_RIGHT)) {
Transform t = Transform.createTranslateTransform(2, 0);
player = player.transform(t);
}
}
public void render(GameContainer container, Graphics g)
throws SlickException {
g.drawString("Player x: " + player.getX(), 10, 20);
g.drawString("Player y: " + player.getY(), 10, 30);
g.drawString("Player center x: " + player.getCenterX(), 10, 40);
g.drawString("Player center y: " + player.getCenterY(), 10, 50);
g.draw(player);
}
public static void main(String[] args) {
try {
AppGameContainer container = new AppGameContainer(new TestCase(), 800, 600, false);
container.setTargetFrameRate(60);
container.setVSync(true);
container.start();
} catch (SlickException e) {
e.printStackTrace();
}
}
}
1 Run the test
2 Observe the correct x, y values
3 Move left or right with the arrow keys
4 Observe that x, y are set to zero
_________________
My website about game development
http://anotherearlymorning.com