【问题标题】:Can't centralize animation (libGdx)无法集中动画(libGdx)
【发布时间】:2013-08-05 21:19:17
【问题描述】:

我在集中我的精灵动画时遇到问题,有人可以给我指点一下吗?

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

    stateTime += Gdx.graphics.getDeltaTime();                       
    currentFrame = walkAnimation.getKeyFrame(stateTime, true);      



    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    batch.draw(currentFrame, Gdx.graphics.getWidth() / 2 - ((walkSheet.getWidth()/FRAME_COLS) / 2), Gdx.graphics.getHeight() / 2 - ((walkSheet.getHeight()/FRAME_ROWS) / 2), width / 2, height / 4);                          

我的动画正在向左绘制几个像素。

【问题讨论】:

  • 看起来您正在尝试使用walkSheet.getWidth()/FRAME_COLS 计算当前帧的宽度...为什么不直接调用currentFrame.getWidth() 呢?
  • @damo 感谢您的回答,但它只是给了我相同的结果,当在桌面上运行时,动画会向右绘制一点,而在我的手机上运行时,它会向左一点,也许不是我必须更改的那段代码?
  • 我还会确保您正确定义了您的TextureRegions。 TextureRegion 可能在屏幕上居中,但精灵可能不在TextureRegion 中居中。

标签: java android animation sprite libgdx


【解决方案1】:

对于x位置,你有-

Gdx.graphics.getWidth() / 2 - ((walkSheet.getWidth()/FRAME_COLS) / 2)

如果每个动画图像都是100px宽,你为什么不使用-

private static final float WALK_ANIM_WIDTH = 100f;

X 位置将是 -

Gdx.graphics.getWidth() / 2f - WALK_ANIM_WIDTH / 2f

更新

根据您的评论,您可以有类似的东西-

public static final int SCREEN_WIDTH = 800;
public static final int SCREEN_HEIGHT = 520;

guiCam = new OrthographicCamera(SCREEN_WIDTH, SCREEN_HEIGHT);
guiCam.position.set(SCREEN_WIDTH / 2f, SCREEN_HEIGHT / 2f, 0);

现在您可以简单地使用 SCREEN_WIDTH,而不是使用“Gdx.graphics.getWidth()”。

看看 libGDX 中的 SuperJumper 演示。您将看到他们如何在游戏世界中使用视口。

【讨论】:

  • 谢谢,这有助于我简化代码,但是,如果我想根据不同的分辨率调整动画大小怎么办?它还会起作用吗?我目前正在使用 Gdx.graphics.getWidth / 2, Gdx.graphics.getHeight / 4 使动画根据当前分辨率调整大小,这就是我认为使我的动画无法居中的原因。我该如何解决这个问题?我希望很容易理解我在写什么,因为英语不是我的母语
  • @IvanCarlos 只要您使用视口,它仍然可以工作。要对其进行测试,您可以调整桌面应用程序的大小。 :) 看看 libGDX 中的 SuperJumper 演示。您将看到 FRUSTUM_WIDTH 和 FRUSTUM_HEIGHT 以及它们的使用方式,因此即使您调整大小,所有内容也会相应地缩放。
  • 非常感谢您的帮助。现在,当我调整窗口大小时,动画也会调整大小,但它会离开中心,当我缩小屏幕时,它会根据屏幕大小转到左下角,并且当我把它放大时,动画会向右移动一点,我怎样才能使动画与相机集中?
  • 刚刚使用 batch.draw(currentFrame, SCREEN_WIDTH / 2f - WALK_ANIM_WIDTH / 2f, SCREEN_HEIGHT / 2f - WALK_ANIM_HEIGHT / 2f)解决了它;感谢您的帮助,我开始更好地理解这个概念:)
猜你喜欢
  • 2015-09-22
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2014-07-06
  • 2023-03-15
  • 2016-10-17
  • 2015-11-20
相关资源
最近更新 更多