【问题标题】:libGDX moving camera and an ImagelibGDX 移动相机和图像
【发布时间】:2013-07-11 07:34:53
【问题描述】:

我目前有一个游戏,其中有一张 480x3200 的地图,一个人从顶部坠落。摄像机跟随人,人落下时有平台。平台需要是可触摸的,这样我才能在游戏过程中旋转和移动它们,所以我把它做成了一个图像,而它最初只是一个精灵。

当我将它从精灵更改为图像时,一切正常,除了当人摔倒时(相机开始向下移动并跟随人),平台也随着相机移动,所以看起来它也在下降.平台应该只停留在一个位置,而不是随着相机移动,这样随着相机不断向下移动,平台最终会从视野中消失。

设置平台并将其添加到舞台

@Override
public void show() {
    ...
    platform = new Image(new Texture(Gdx.files.internal("img_platform.png")));
    platform.setX(2);
    platform.setY(110);
    platform.setOrigin(platform.getWidth() / 2, platform.getHeight() / 2);

@Override
public void render(float delta) {
    ....
    stage.addActor(platform);   
}

我查看了 API,无法确定是否需要更改相机、舞台或图像,或者其他我没有想到的东西。有什么想法吗?

编辑:

public WorldRenderer(FallDown game, SpriteBatch batch, World w) {
    this.cam = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT); 
    this.cam.position.set(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2, 0);
    this.cam.setToOrtho(false, CAMERA_WIDTH, CAMERA_HEIGHT);
    cam.position.set(CAMERA_WIDTH / 2, 105, 0);
    stage = new Stage(480, 800, true);

    platformTexture = new Image(new Texture(Gdx.files.internal("img_platform.png")));
    platformTexture.setX(2);
    platformTexture.setY(100);
    platformTexture.setOrigin(platformTexture.getWidth() / 2, platformTexture.getHeight() / 2);
    ...

}

public void render(float delta) { 
    stage.addActor(platformTexture);
    moveCamera();
    ...
}

private void moveCamera() {
    if (Person.getPosition().y < cam.position.y) 
        cam.position.y = Person.getPosition().y;
    cam.update();
}

...

【问题讨论】:

  • 移动 stage.addActor(platform) 到 show() 方法。您当前正在每个渲染循环中将演员重新添加到舞台。
  • @Aert 我在 show() 中添加了 stage.addActor(platform),它给了我一个 NullPointerException。但我认为添加到 show() 对我的情况不起作用,因为我还需要在平台上进行碰撞检测

标签: android libgdx


【解决方案1】:

通常这是通过将您的相机设置在演员(正在下落)并向下移动您的演员来实现的。随着演员向下移动,相机将跟随它保持平台静止。

这有帮助吗??

【讨论】:

  • 这就是我目前设置相机的方式。我有一种方法可以在人的位置到达某个点时向下移动相机
  • 对不起。实际上你必须带2个相机。通常一个用于游戏画面,另一个用于游戏世界。游戏画面中的相机不会移动。现在使用静态相机绘制您的平台,并使用移动相机绘制您的其他东西。这个想法很简单,游戏中所有静态的东西都将使用静态相机,而动态的东西将使用移动相机。对于任何参考检查超级跳线源。 github.com/libgdx/libgdx/tree/master/demos/superjumper
  • 我有点像你之前所说的那样设置它。我的 GameScreen 中有一个不会移动的相机,而 WorldRenderer 中有另一个移动的相机(也是我最初绘制平台精灵的地方)。我将我的代码移到 WorldRenderer,并尝试让它工作,但图像仍然没有停留在一个位置。我编辑了我的帖子并更新了我当前的代码。到目前为止,我感谢您的帮助
【解决方案2】:

我决定只使用 Sprite,而不是使用图像。它允许我做我需要做的所有事情,而且我没有舞台只是当前屏幕的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多