我有一个40060px宽,640px高的平铺地图。
我还有一个64x宽和64px高的主角和坏角色。
假设平铺地图的左下角以(0,0)像素显示。 我试图使主角从平铺地图的位置(0,0)开始,并且能够沿着x轴一直移动到平铺地图的另一端,这取决于用户的输入。
此外,我想要一个坏人在x轴上以(255,0)渲染,并且在x轴上具有255到511之间的移动范围,这将在程序上进行控制。
此刻,我的代码将显示平铺地图和两个字符,但当我移动其中一个字符时,另一个字符也会被移动。
I have a link here to an image for clarity
这是我在实现libGdx屏幕界面的类中的代码。
public TestScreen(MyGame game){
this.game = game;
camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2, 0);
camera.update();
String filename = "levelMaps/level_1.tmx";
map = new TmxMapLoader().load(filename);
mapRenderer = new OrthogonalTiledMapRenderer(map);
mainPlayer = new Player();
badGuy = new BadGuy();
badGuy.velocity.x = camera.position.x;
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
mapRenderer.setView(camera);
mapRenderer.render();
game.batch.begin();
mainPlayer.render(game.batch);
badGuy.render(game.batch);
game.batch.end();
//simple input handling
if(Gdx.input.isKeyPressed(Keys.LEFT)){
if(mainPlayer.velocity.x >= 0 && camera.position.x > 400){
mainPlayer.moveLeft();
camera.position.x -= Math.abs(superSim.velocity.x);
} else {
camera.position.x = 400;
superSim.velocity.x = 0;
}
}
if(Gdx.input.isKeyPressed(Keys.RIGHT)){
if(mainPlayer.velocity.x >= 0 && camera.position.x < 41286-(64*12)){
mainPlayer.moveRight();
camera.position.x += superSim.velocity.x;
}
}
camera.update();
mainPlayer.update(delta);
}
如果玩家的位置是动态的,我怎么能让badguys的位置保持不变?
Anyhelp真的很感激
答案 0 :(得分:0)
这就是我将相机简化为16 * 9单位的方式。
private OrthographicCamera camera;
camera = new OrthographicCamera(16, 9);
camera.position.set(camera.viewportWidth / 2,
camera.viewportHeight / 2, 0);
camera.update();
我的调整大小方法
public void resize(int width, int height) {
camera.viewportHeight = 16 * (float) height / (float) width;
camera.update();
}
真的我的相机是16 * y单位,因为我计算高度以保持相同的宽高比。
使用deltaTime进行移动,使应用程序以不同的fps速率平稳运行。你的输入处理非常奇怪。你为什么要改变相机的位置?如果你需要让你的相机跟随播放器,那就做这样的事情:
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.mygdx.game.entities.Player;
public class ExtendedCamera extends OrthographicCamera {
public Player player;
public ExtendedCamera(Player player) {
super(Constants.WORLD_WIDTH, Constants.WORLD_HEIGHT);
this.player = player;
}
public void followPlayer() {
if (player.body.getPosition().x - position.x > Constants.CAMERA_FOLLOW_LINE_X) {
position.x = player.body.getPosition().x
- Constants.CAMERA_FOLLOW_LINE_X;
update();
} else if (player.body.getPosition().x - position.x < -Constants.CAMERA_FOLLOW_LINE_X) {
position.x = player.body.getPosition().x
+ Constants.CAMERA_FOLLOW_LINE_X;
update();
}
if (player.body.getPosition().y - position.y > Constants.CAMERA_FOLLOW_LINE_Y) {
position.y = player.body.getPosition().y
- Constants.CAMERA_FOLLOW_LINE_Y;
update();
} else if (player.body.getPosition().y - position.y < -Constants.CAMERA_FOLLOW_LINE_Y) {
position.y = player.body.getPosition().y
+ Constants.CAMERA_FOLLOW_LINE_Y;
update();
}
}
}
通过这种跟随方法,玩家可以自由移动区域,相机不会跟随他。如果玩家离开此区域,相机会移动。