LibGdx - 带有 TiledMap 和两个 actor 的横向卷轴



我有一个宽40960px,高640px的平铺地图。

我还有一个主角和一个坏人,宽 64px 高,高 64px。

假设切片地图的左下角以 (0,0) 像素为单位显示。我试图让主角从平铺地图的位置 (0,0) 开始,并能够根据用户的输入沿着 x 轴一直移动到平铺地图的另一端。

我还希望在 x 轴上以 (255,

0) 渲染一个坏人,并在 x 轴上在 255 和 511 之间移动,这将以编程方式控制。

目前,我的代码将显示平铺地图和两个字符,但是当我移动其中一个字符时,另一个字符也会移动。

为了清楚起见,我这里有一个指向图像的链接

这是我在实现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);
}

如何让坏人的位置保持不变,而玩家的位置是动态的?

任何帮助是真正感谢的

这就是我将相机初始化为 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();
            }
        }
    }

使用这种跟随方法,玩家有可以自由移动的区域,相机不会跟随他。如果玩家离开此区域,摄像机将移动。

相关内容

  • 没有找到相关文章

最新更新