I have a strange bug in my collision detection. Everytime I go to move in general the game crashes and gives me this error.
Sun Apr 06 16:42:03 CDT 2014 INFO:Slick Build #237
Sun Apr 06 16:42:03 CDT 2014 INFO:LWJGL Version: 2.9.1
Sun Apr 06 16:42:03 CDT 2014 INFO:OriginalDisplayMode: 1366 x 768 x 32 @60Hz
Sun Apr 06 16:42:03 CDT 2014 INFO:TargetDisplayMode: 800 x 600 x 0 @0Hz
Sun Apr 06 16:42:04 CDT 2014 INFO:Starting display 800x600
Sun Apr 06 16:42:04 CDT 2014 INFO:Use Java PNG Loader = true
Sun Apr 06 16:42:04 CDT 2014 INFO:Controllers not available
Sun Apr 06 16:42:05 CDT 2014 ERROR:720
java.lang.ArrayIndexOutOfBoundsException: 720
at org.newdawn.slick.tiled.Layer.getTileID(Layer.java:148)
at org.newdawn.slick.tiled.TiledMap.getTileId(TiledMap.java:261)
at ml.ardamax.epik.Game.update(Game.java:86)
at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:266)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:663)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
at ml.ardamax.epik.Main.main(Main.java:30)
Sun Apr 06 16:42:05 CDT 2014 ERROR:Game.update() failure - check the game code.
org.newdawn.slick.SlickException: Game.update() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:669)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
at ml.ardamax.epik.Main.main(Main.java:30)
I’m not really sure whats going on…? Here is the source code for the Main Game State in my slick2d game.
Game.java:
package ml.ardamax.epik;
import java.util.ArrayList;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.Music;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.Color;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.geom.Rectangle;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.GameState;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.tiled.TiledMap;
@SuppressWarnings("unused")
public class Game extends BasicGameState {
private SpriteSheet sprites;
private Music main;
private TiledMap level1;
private Image wizard;
private Image archer;
public int x;
public int y;
public int mx;
public int my;
public int objectLayer;
@Override
public void init(GameContainer gc, StateBasedGame game)
throws SlickException {
x = 736;
y = 526;
sprites = new SpriteSheet("/res/sprites.png", 16, 16);
wizard = sprites.getSubImage(64, 96, 16, 16);
archer = sprites.getSubImage(80, 96, 16, 16);
level1 = new TiledMap("/res/level1.tmx");
}
@SuppressWarnings("static-access")
@Override
public void render(GameContainer gc, StateBasedGame game, Graphics g)
throws SlickException {
Input input = gc.getInput();
//wizard.draw(736, 526, 2.0f);
archer.draw(x, y, 2.0f);
level1.render(0, 0);
if (input.isMouseButtonDown(input.MOUSE_LEFT_BUTTON)){
mx = input.getAbsoluteMouseX();
my = input.getAbsoluteMouseY();
g.drawString("X: "+mx+" Y:" +my, 0, 0);
}
}
@Override
public void update(GameContainer gc, StateBasedGame game, int delta)
throws SlickException {
objectLayer = level1.getLayerIndex("Objects");
Input input = gc.getInput();
if (input.isKeyPressed(input.KEY_Q)){
gc.exit();
}
if (input.isKeyPressed(input.KEY_D) || input.isKeyDown(input.KEY_D)|| input.isKeyDown(input.KEY_RIGHT)|| input.isKeyPressed(input.KEY_RIGHT)){
if (level1.getTileId(x, y+16, objectLayer) == 33 || level1.getTileId(x, y+16, objectLayer) == 40 || level1.getTileId(x, y+16, objectLayer) == 90){
y +=5;
}
x+=16;
}else if (input.isKeyPressed(input.KEY_W) || input.isKeyDown(input.KEY_W)|| input.isKeyDown(input.KEY_UP)|| input.isKeyPressed(input.KEY_UP)){
if (level1.getTileId(x, y+16, objectLayer) == 33 || level1.getTileId(x, y+16, objectLayer) == 40 || level1.getTileId(x, y+16, objectLayer) == 90){
y +=5;
}
y-=16;
}else if (input.isKeyPressed(input.KEY_A) || input.isKeyDown(input.KEY_A) || input.isKeyDown(input.KEY_LEFT)|| input.isKeyPressed(input.KEY_LEFT)){
if (level1.getTileId(x-16, y, objectLayer) == 33 || level1.getTileId(x-16, y, objectLayer) == 40 || level1.getTileId(x-16, y, objectLayer) == 90){
x -=5;
}
x-=16;
}
}
@Override
public int getID() {
// TODO Auto-generated method stub
return 1;
}
}
Sorry for the really messy code.