Java 创建的对象会附着在屏幕上,不会随地图移动
问题在于如何在地图上创建对象。一切都会很好,但突然间我只能在屏幕上创建对象(即图像)。每当我给一个物体一些亲切感时,它会取屏幕的(0,0)点,而不是地图。 所以我可以在地图上移动我的人(相机工作正常),但例如蜘蛛留在屏幕上,而不是在地图上。 这里是对象的初始化:Java 创建的对象会附着在屏幕上,不会随地图移动,java,slick2d,Java,Slick2d,问题在于如何在地图上创建对象。一切都会很好,但突然间我只能在屏幕上创建对象(即图像)。每当我给一个物体一些亲切感时,它会取屏幕的(0,0)点,而不是地图。 所以我可以在地图上移动我的人(相机工作正常),但例如蜘蛛留在屏幕上,而不是在地图上。 这里是对象的初始化: static float PlayerPositionX = 0; static float PlayerPositionY = 0; static GameContainer gc; static StateBasedGame sb
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;
这是我对地图、蜘蛛和玩家的渲染方法。(当然只是一部分)
更新方法:
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;
}
}
}
public void update(GameContainer gc、StateBasedGame sbg、int delta)引发异常{
System.out.println(playerPoint.getX()+“”+playerPoint.getY());
playerPoint.x=PlayerPositionX;
playerPoint.y=PlayerPositionY;
Input=gc.getInput();
怪物追逐(playerPoint.x,playerPoint.y,delta);
//怪物追逐(PlayerPositionX,PlayerPositionY,delta);
//shiftXSpider=monster.getMonsterPositionX();
//shiftYSpider=monster.getMonsterPositionY();
spiderPoint.x=monster.getMonsterPositionX();
spiderPoint.y=monster.getMonsterPositionY();
if(input.isKeyDown(input.KEY_DOWN)){
玩家=向下移动;
播放位置Y-=增量*.1f;
如果(播放位置162){
播放位置Y-=增量*.1f;
}
}
//右移
if(input.isKeyDown(input.KEY_RIGHT)){
玩家=向右移动;
PlayerPositionX-=增量*.1f;
如果(播放位置X324){
PlayerPositionX-=增量*.1f;
}
}
}
我是通过一门camera课程完成的在这里你可以找到我所有的课程:
我的小游戏(未完成): 示例矩形的我的渲染:
@Override
public void render(GameContainer gc, Graphics g, Camera camera) {
g.setColor(color);
g.fillRect(x - camera.getX(), y - camera.getY(), width, height);
}
float targetX = x - (gc.getWidth() / 2);
camera.setTargetX(targetX);
float targetY = y - (gc.getHeight() / 2);
camera.setTargetY(targetY);
对于该摄像头类,您应该在玩家更新方法中设置targetX和targetY位置:
@Override
public void render(GameContainer gc, Graphics g, Camera camera) {
g.setColor(color);
g.fillRect(x - camera.getX(), y - camera.getY(), width, height);
}
float targetX = x - (gc.getWidth() / 2);
camera.setTargetX(targetX);
float targetY = y - (gc.getHeight() / 2);
camera.setTargetY(targetY);
然后在你的世界的更新循环中,你必须调用相机的更新循环。
有了这个,我的屏幕中央有一个播放器,地图上有一些方块。它们的位置非常好。也许您应该在初始化这些shiftXSpider和shiftYSpider的init方法中询问这一点。但是,您不会在更新方法中修改这些,也不会在渲染爬行器的渲染方法中使用这些。