gpt4 book ai didi

java - 使用 TiledMap 跟随播放器的 LibGDX 相机?

转载 作者:行者123 更新时间:2023-11-29 05:39:58 26 4
gpt4 key购买 nike

我正在尝试将相机设置为聚焦在中心的玩家上,因为它经过固定在适当位置的 TiledMap。我正在为相机使用此渲染代码:

OverworldWorld world;
Player player;
OrthographicCamera cam;
SpriteBatch batch;
TiledMap map;
TileAtlas tileAtlas;
TileMapRenderer tmr;

public Renderer(OverworldWorld world){
this.world = world;

world.setRenderer(this);

width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();

new TiledLoader();
map = TiledLoader.createMap(Gdx.files.internal("maps/island.tmx"));
tileAtlas = new TileAtlas(map, Gdx.files.internal("maps/"));
tmr = new TileMapRenderer(map, tileAtlas, 16, 16);

cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.setToOrtho(false, width, height);
cam.position.set(0, 0, 0);
cam.update();

batch = new SpriteBatch();
batch.setProjectionMatrix(cam.projection);

sr = new ShapeRenderer();


}

public void render(){
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

player = world.getPlayer();

cam.position.set(player.getPosition().x, player.getPosition().y, 0);
cam.update();

tmr.getProjectionMatrix().set(cam.combined);

Vector3 tmp = new Vector3();
tmp.set(0, 0, 0);
cam.unproject(tmp);
tmr.render((int) tmp.x, (int) tmp.y, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

结果是玩家被锁定在 map 的左下角,移动玩家会在 map 上移动相机。 Action 非常基本:

player = world.getPlayer();
switch(keycode){
case Keys.W:
player.getVelocity().y = 1;
player.direction = "up";
break;

和更新玩家位置使用这个(这是版本 0.9.8):

position.add(velocity.tmp().mul(Gdx.graphics.getDeltaTime() * speed));

是什么导致了这个问题,如何解决?

最佳答案

我会尽力解释我所知道的一种实现方法,如果这没有帮助,我们深表歉意。

您需要让您的玩家了解当前的 XY。获取 X()、获取 Y()。您可以将其手动添加到您的播放器类中。获得访问权限后,您需要做的就是启动空相机,并将相机位置设置为玩家 XY、他的宽度、高度和一些小分区。这看起来像这样。

@Override
public void create() {


cam = new OrthographicCamera();


}

这将适用于 create()、resize() 或 show() 方法。

最后我们渲染相机并获取坐标。

@Override
public void render() {
Gdx.gl.glClearColor(0.294f, 0.294f, 0.294f, 1f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

cam.position.set(viewer.getX() + viewer.getWidth() / 2, viewer.getY() + viewer.getHeight() / 2, 0);
cam.viewportWidth = Gdx.graphics.getWidth() / viewer.getZoom();
cam.viewportHeight = Gdx.graphics.getHeight() / viewer.getZoom();

cam.update();

}

所以在简单的数学中。

(当前玩家 X + 玩家当前宽度/2)对于 x 和(玩家当前 Y + 玩家当前高度/2)对于 y

之后的几行是如何使用播放器类中存储的 float 来缩放相机的示例。

cam.viewportWidth = Gdx.graphics.getWidth() / viewer.getZoom();
cam.viewportHeight = Gdx.graphics.getHeight() / viewer.getZoom();

使用此代码,您可以轻松地让相机在角色加速时放大和缩小。

我希望这对您有所帮助。

关于java - 使用 TiledMap 跟随播放器的 LibGDX 相机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com