java游戏-光滑的滚动条-玩家不能移动

标签 java animation lwjgl slick2d scroller

我的滚动条工作正常,但我无法移动播放器

播放器居中于窗口屏幕的中间。 map 以玩家的位置为中心。

窗口(程序)大小为 640 x 640 像素

map map.tmx正交(塞尔达/ Sprite 宝可梦风格的游戏)。

仅使用向上、向下、向右、向左键(无对角线移动)。

我在计算什么或做错了什么?

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;
        }

    }

}

最佳答案

基本思路:

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

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

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

在我的例子中工作

关于java游戏-光滑的滚动条-玩家不能移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426525/

相关文章:

用于阶乘错误输出的 Java 程序

java - JAAS错误登录失败: all modules ignored是什么意思

objective-c - 为什么按钮不能在动画中移动?

java - 有没有办法在 LWJGL/LibGDX 中设置应用程序窗口的位置?

java - LWJGL 多重纹理不起作用

java.util.logging 自定义格式化程序未按预期工作

java - 检查程序调试

jquery - 重新启动时,如何使此 CSS 关键帧动画流畅?

animation - Cocos2d 变色 Sprite

java - Sys.getTime() 和 Sys.getTimerResolution() 的替代品?