java - 如何让我的相机更新与我的播放器精灵相同的帧?
问题描述
在 LibGDX 中,当我移动它时,我试图让我的 OrthographicCamera 跟随玩家精灵。目前,玩家精灵首先更新,然后在下一帧中,相机更新到前一帧中玩家精灵的位置。这是一个例子: https ://i.imgur.com/wxJUizU.gifv
我已经尝试将 gameMap.render(cam) 移动到方法的底部,但它不仅没有解决我的问题,它还将地图纹理放在玩家精灵上方,所以你将无法再看到玩家精灵它在地图下移动。
以下是渲染播放器精灵和相机的代码:
public void render () {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.viewportHeight = Gdx.graphics.getHeight() / 3;
cam.viewportWidth = Gdx.graphics.getWidth() / 3;
gameMap.render(cam);
gameMap.getTiledMapRenderer().getBatch().begin();
player.draw(gameMap.getTiledMapRenderer().getBatch());
gameMap.getTiledMapRenderer().getBatch().end();
cam.position.x = player.getX() + (player.getWidth() / 2);
cam.position.y = player.getY() + (player.getHeight() / 2);
cam.update();
}
解决方案
通常,您希望将逻辑分为两个部分:
更新
使成为
因此,在每一帧之前,您要执行任何相关的计算。您的相机当前更新较晚,因为它在游戏地图更新后才执行逻辑。例如:
// Perform logic and update the state
public void Update () {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.viewportHeight = Gdx.graphics.getHeight() / 3;
cam.viewportWidth = Gdx.graphics.getWidth() / 3;
gameMap.getTiledMapRenderer().getBatch().begin();
cam.position.x = player.getX() + (player.getWidth() / 2);
cam.position.y = player.getY() + (player.getHeight() / 2);
}
// Draw map
public void Render () {
gameMap.render(cam);
player.draw(gameMap.getTiledMapRenderer().getBatch());
gameMap.getTiledMapRenderer().getBatch().end();
cam.update();
}
我不熟悉您使用的框架,所以我无法判断它是否会运行,但是在任何游戏开发情况下使用框架时,这就是您想要处理的方式。
推荐阅读
- ruby-on-rails - has_many form_with 中未定义的方法“networkinterface_path”
- flutter - 当我调用 Web 服务的 url 时连接被拒绝
- flutter - 将曲线应用到现有动画
- c - 为什么我的 Collatz 序列的 C 程序不打印最终值 (1)?
- kubernetes - Kafka Producer jmx 指标缺失
- android - 模拟器:INSTALL_FAILED_NO_MATCHING_ABIS
- c - 如何使字符串月份在 C 中打印与其等效的数字?
- react-native - Android React Native 应用程序在 Android Studio 中构建,但不使用 React Native CLI
- rust - 如何实现递归节点结构?
- sql - SQL where 条件是否为每一行执行?