【问题标题】:Created Object sticks to the screen and does not move with the map创建的对象粘在屏幕上,不随地图移动
【发布时间】:2013-01-09 18:47:32
【问题描述】:

问题在于在地图上创建对象。一切都会好的,但突然间我只能在屏幕上创建对象(即图像)。每当我给一个对象一些坐标时,它会占用屏幕的 (0,0) 点,而不是地图。 所以我可以在地图上移动我的人(相机工作正常),但例如蜘蛛停留在屏幕上,而不是在地图上。 这里初始化对象:

static float PlayerPositionX = 0;
static float PlayerPositionY = 0;
static GameContainer gc; 
static StateBasedGame sbg;

//Spider
Monster monster = new Monster();

float shiftXSpider;
float shiftYSpider;

//Player position at the middle of the screen *half of the screen
static float shiftX = PlayerPositionY + (Game.screenWidth/2);
static float shiftY = PlayerPositionX + (Game.screenHeight/2);
static float shiftXMap = PlayerPositionX;
static float shiftYMap = PlayerPositionY;

这是我的地图、蜘蛛和播放器的渲染方法。 (当然只是一部分)

worldMap.draw(PlayerPositionX,PlayerPositionY);
player.draw(shiftX,shiftY);
spider.draw(spiderPoint.x, spiderPoint.y);

更新方法:

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
    System.out.println(playerPoint.getX() + " " + playerPoint.getY());
    playerPoint.x=PlayerPositionX;
    playerPoint.y=PlayerPositionY;
    Input input = gc.getInput();
    monster.Chase(playerPoint.x, playerPoint.y,delta);
    // monster.Chase(PlayerPositionX, PlayerPositionY,delta);
    // shiftXSpider=monster.getMonsterPositionX();
    // shiftYSpider=monster.getMonsterPositionY();
    spiderPoint.x=monster.getMonsterPositionX();
    spiderPoint.y=monster.getMonsterPositionY();

    if(input.isKeyDown(input.KEY_DOWN)) {
        player=movingDown;
        PlayerPositionY-=delta * .1f;
        if(PlayerPositionY<-600) {
            PlayerPositionY+=delta * .1f;
        }
    }
    //move up
    if(input.isKeyDown(input.KEY_UP)) {
        player=movingUp;
        PlayerPositionY+=delta * .1f;
        if(PlayerPositionY>162) {
            PlayerPositionY-=delta * .1f;
        }
    }
    //move right
    if(input.isKeyDown(input.KEY_RIGHT)) {
        player=movingRight;
        PlayerPositionX-=delta * .1f;
        if(PlayerPositionX<-840) {
            PlayerPositionX+=delta * .1f;
        }
    }
    //move left
    if(input.isKeyDown(input.KEY_LEFT)) {
        player=movingLeft;
        PlayerPositionX+=delta * .1f;
        if(PlayerPositionX>324) {
            PlayerPositionX-=delta * .1f;
        }
    }
}

【问题讨论】:

  • 也许你应该在gamedev.stackexchange.com问这个
  • 在您的 init 方法中初始化这些 shiftXSpider 和 shiftYSpider。但是,您不要在 update 方法中修改这些,也不要在 render 方法中使用这些来渲染蜘蛛。

标签: java slick2d


【解决方案1】:

我用相机课做到了这一点。
在这里你可以找到我所有的课程:http://pastebin.com/u/huneater
我的小游戏(未完成):https://www.dropbox.com/s/dhvf5vbqj25sgyw/game.jar

我对示例矩形的渲染:

@Override
    public void render(GameContainer gc, Graphics g, Camera camera) {
        g.setColor(color);
        g.fillRect(x - camera.getX(), y - camera.getY(), width, height);
    }

对于这个摄像头类,您应该在玩家更新方法中设置 targetX 和 targetY 位置:

float targetX = x - (gc.getWidth() / 2);
camera.setTargetX(targetX);

float targetY = y - (gc.getHeight() / 2);
camera.setTargetY(targetY);

然后在您的世界更新循环中,您必须调用相机的更新循环。 所以有了这个,我在我的屏幕中间找到了一个玩家,地图上有一些块。而且它们的位置非常完美。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多