如何制作跟随我的播放器的相机?
How do I make a camera that follows my Player?
我有一个玩家 class,它的 x 和 y 位置是用 xPos 和 yPos 操纵的,我想创建一个跟随玩家的相机。
到目前为止我试过这个:
相机class:
import org.newdawn.slick.GameContainer;
public class Camera {
public int offsetMaxX;
public int offsetMaxY;
public int offsetMinX;
public int offsetMinY;
public int camX;
public int camY;
private Player player;
public Camera(Player p) {
//Setting offset max's and minimums
offsetMaxX = 0;
offsetMaxY = 0;
offsetMinX = 0;
offsetMinY = 0;
player = p;
}
public void update(GameContainer gc) {
camX = player.xPos - (gc.getWidth() / 2);
camY = player.yPos - (gc.getHeight() / 2);
}
}
我的主要 class 中的渲染函数是:
@Override
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
//Translate to camera X and Y
g.translate(-camera.camX, -camera.camY);
//Scaling map
g.scale(3, 3);
//Rendering map
try {
mapRender.render();
} catch (SlickException e1) {
e1.printStackTrace();
}
//Draw player
player1.drawPlayer(g);
}
这可行,但相机移动速度比播放器慢。我该如何修复此代码,或者是否有更好的方法来执行此操作?
我自己修好了。在画我的球员时,我做了
g.translate(.5, .5);
所以在定位我的相机时,我必须做
camX = ((player.xPos * 1.5f)) - (gc.getWidth() / 2);
camY = (player.yPos * 1.5f) - (gc.getHeight() / 2);
我有一个玩家 class,它的 x 和 y 位置是用 xPos 和 yPos 操纵的,我想创建一个跟随玩家的相机。
到目前为止我试过这个:
相机class:
import org.newdawn.slick.GameContainer;
public class Camera {
public int offsetMaxX;
public int offsetMaxY;
public int offsetMinX;
public int offsetMinY;
public int camX;
public int camY;
private Player player;
public Camera(Player p) {
//Setting offset max's and minimums
offsetMaxX = 0;
offsetMaxY = 0;
offsetMinX = 0;
offsetMinY = 0;
player = p;
}
public void update(GameContainer gc) {
camX = player.xPos - (gc.getWidth() / 2);
camY = player.yPos - (gc.getHeight() / 2);
}
}
我的主要 class 中的渲染函数是:
@Override
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
//Translate to camera X and Y
g.translate(-camera.camX, -camera.camY);
//Scaling map
g.scale(3, 3);
//Rendering map
try {
mapRender.render();
} catch (SlickException e1) {
e1.printStackTrace();
}
//Draw player
player1.drawPlayer(g);
}
这可行,但相机移动速度比播放器慢。我该如何修复此代码,或者是否有更好的方法来执行此操作?
我自己修好了。在画我的球员时,我做了
g.translate(.5, .5);
所以在定位我的相机时,我必须做
camX = ((player.xPos * 1.5f)) - (gc.getWidth() / 2);
camY = (player.yPos * 1.5f) - (gc.getHeight() / 2);