I’m not sure what is wrong with my animation. It was smooth, now it’s not, I only have two classes here. Is it something to do with my delay or is it something to do with how I’m using spritemanager.getSprite();
package tiledgame;
import java.awt.Point;
import java.util.Map;
import org.newdawn.slick.Image;
import org.newdawn.slick.SpriteSheet;
/**
* @author HadesVine
*/
public class CharacterEntity {
public static final int UP = 0;
public static final int RIGHT = 1;
public static final int DOWN = 2;
public static final int LEFT = 3;
public static final int IDLE = 0;
public static final int WALK = 1;
private SpriteSheet spriteSheet;
private int facing = 0;//The direction a sprite is facing;
private int state = 0;
private float locationX;
private float locationY;
private int walkDelay = 200;
private int currentFrame = 0;
private int timePassed = 0;
private int walkColumn = 0;
public CharacterEntity(SpriteSheet spriteSheet, float locationX, float locationY) {
this.spriteSheet = spriteSheet;
this.locationX = locationX;
this.locationY = locationY;
}
public int getFacing() {
return facing;
}
public void setFacing(int facing) {
this.facing = facing;
}
public float getLocationX() {
return locationX;
}
public void setLocationX(float locationX) {
this.locationX = locationX;
}
public float getLocationY() {
return locationY;
}
public void setLocationY(float locationY) {
this.locationY = locationY;
}
public void setState(int state) {
this.state = state;
}
public int getState() {
return state;
}
public int getWalkDelay() {
return walkDelay;
}
public void setWalkDelay(int walkDelay) {
this.walkDelay = walkDelay;
}
public int getWalkColumn() {
return walkColumn;
}
public void setWalkColumn(int walkColumn) {
this.walkColumn = walkColumn;
}
public void tick(int delta) {
if (this.state == WALK) {
if (timePassed >= walkDelay) {
timePassed = 0;
if (this.currentFrame == 1) {
this.currentFrame = -1;
} else {
this.currentFrame = 1;
}
} else {
timePassed += delta;
}
}else{
currentFrame = 0;
}
}
public Image getSprite() {
return this.spriteSheet.getSprite(this.currentFrame + this.walkColumn, this.facing);
}
}
package tiledgame;
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.SpriteSheet;
/**
* @author HadesVine
*/
public class TiledGame extends BasicGame {
private GameContainer gc;
private float moveSpeed = 1;
private CharacterEntity testEntity;
private boolean playerIsMoving = false;
public TiledGame() {
super("Tiled game");
}
public static void main(String[] args) throws SlickException {
AppGameContainer app = new AppGameContainer(new TiledGame());
app.setDisplayMode(1024, 768, false);
app.start();
}
@Override
public void init(GameContainer gc) throws SlickException {
testEntity = new CharacterEntity(new SpriteSheet("com/hadesvine/tilegame/tiles/crono.png", 24, 32), 400, 300);
testEntity.setWalkColumn(4);
testEntity.setWalkDelay(200);
}
@Override
public void update(GameContainer gc, int delta) throws SlickException {
playerIsMoving = false;
Input input = gc.getInput();
float rate = delta / 10;
if (input.isKeyDown(Input.KEY_W)) {
testEntity.setFacing(CharacterEntity.UP);
testEntity.setLocationY(testEntity.getLocationY() - moveSpeed * rate);
playerIsMoving = true;
}
if (input.isKeyDown(Input.KEY_D)) {
testEntity.setFacing(CharacterEntity.RIGHT);
testEntity.setLocationX(testEntity.getLocationX() + moveSpeed * rate);
playerIsMoving = true;
}
if (input.isKeyDown(Input.KEY_S)) {
testEntity.setFacing(CharacterEntity.DOWN);
testEntity.setLocationY(testEntity.getLocationY() + moveSpeed * rate);
playerIsMoving = true;
}
if (input.isKeyDown(Input.KEY_A)) {
testEntity.setFacing(CharacterEntity.LEFT);
testEntity.setLocationX(testEntity.getLocationX() - moveSpeed * rate);
playerIsMoving = true;
}
if (input.isKeyDown(Input.KEY_2)) {
if (moveSpeed != 500) {
moveSpeed += 1;
}
}
if (input.isKeyDown(Input.KEY_1)) {
if (moveSpeed > 1) {
moveSpeed -= 1;
}
}
if (input.isKeyDown(Input.KEY_3)) {
if (moveSpeed > 1) {
moveSpeed = 1;
}
}
if (playerIsMoving) {
testEntity.setState(CharacterEntity.WALK);
} else {
testEntity.setState(CharacterEntity.IDLE);
}
testEntity.tick(delta);
}
@Override
public void render(GameContainer gc, Graphics g) throws SlickException {
testEntity.getSprite().draw(testEntity.getLocationX(), testEntity.getLocationY());
}
}
Any help would be appreciated.