2012-11-17 35 views
2

我的滾動工作正常,但我不能移動玩家java遊戲 - 華麗的滾動 - 玩家不能移動

玩家正在屏幕中間居中。而地圖則以玩家的位置爲中心。

窗口(程序)的大小是640×640像素

地圖map.tmx正交(塞爾達/小寵物的遊戲風格)。

只使用UP,DOWN,RIGHT,LEFT鍵(無對角線移動)。

我正在計算或做的不好?

public class Play extends BasicGameState { 

    Animation movingUp, movingDown, movingLeft, movingRight; 
    Animation player; 
    String playerName = "Test"; 
    boolean quit = false; 
    int[] duration = {200, 200, 200}; 
    int playerX = 0; 
    int playerY = 0; 
    int cameraX; 
    int cameraY; 
    int screenWidth; 
    int screenHeight; 
    private TiledMap map = null; 
    private static final float SPEED = 0.1f; 

    public Play(int state, float x, float y) { 
     playerX = (int) x; 
     playerY = (int) y; 
    } 

    @Override 
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException { 

     map = new TiledMap("map/map.tmx"); 

     Image[] walkUp = { 
      new Image("graphics/player/up0.png"), 
      new Image("graphics/player/up1.png"), 
      new Image("graphics/player/up2.png") 
     }; 

     Image[] walkDown = { 
      new Image("graphics/player/down0.png"), 
      new Image("graphics/player/down1.png"), 
      new Image("graphics/player/down2.png") 
     }; 
     Image[] walkLeft = { 
      new Image("graphics/player/left0.png"), 
      new Image("graphics/player/left1.png"), 
      new Image("graphics/player/left2.png") 
     }; 
     Image[] walkRight = { 
      new Image("graphics/player/right0.png"), 
      new Image("graphics/player/right1.png"), 
      new Image("graphics/player/right2.png") 
     }; 

     movingUp = new Animation(walkUp, duration, false); 
     movingDown = new Animation(walkDown, duration, false); 
     movingLeft = new Animation(walkLeft, duration, false); 
     movingRight = new Animation(walkRight, duration, false); 

     player = movingDown; 

    } 

    @Override 
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException { 

     screenWidth = gc.getWidth(); 
     screenHeight = gc.getHeight(); 

     cameraX = (screenWidth/2) - (playerX/2); 
     cameraY = (screenHeight/2) - (playerY/2); 

     map.render(playerX, playerY); 

     player.draw(cameraX, cameraY); 

     g.drawString("X: " + playerX + "\nY: " + playerY, 520, 20); 
     g.resetTransform(); 

    } 

    @Override 
    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException { 
     Input input = gc.getInput(); 

     if (input.isKeyDown(Input.KEY_UP)) { 
      player = movingUp; 
      player.update(delta); 
      playerY += delta * SPEED; 
     } else if (input.isKeyDown(Input.KEY_DOWN)) { 
      player = movingDown; 
      player.update(delta); 
      playerY -= delta * SPEED; 
     } else if (input.isKeyDown(Input.KEY_LEFT)) { 
      player = movingLeft; 
      player.update(delta); 
      playerX += delta * SPEED; 
     } else if (input.isKeyDown(Input.KEY_RIGHT)) { 
      player = movingRight; 
      player.update(delta); 
      playerX -= delta * SPEED; 
     } 

    } 

} 
+4

你沒有提供的'player.update()'函數,但看起來你是在'shiftX繪製玩家'和'shiftY'永不改變。玩家動畫是否工作? –

+0

我可以改變播放器的方向,但只有動畫的up0,down0,left0,right0會顯示 –

+0

有player.update(delta);在更新方法 –

回答

1

基本思想:

screenWidth = gc.getWidth(); 
screenHeight = gc.getHeight(); 

cameraX = (screenWidth/2) - (playerX/2); 
cameraY = (screenHeight/2) - (playerY/2); 

map.render(playerX, playerY); 
player.draw(cameraX, cameraY); 

在我的示例工作