9

因此,我非常兴奋地开始使用 LibGDX 作为 OUYA 和 PC 的第一个 android 标题,但我在使用 LibGDX 时遇到了一些障碍。(我所有的问题都可以通过查看源代码来回答,但我也确实在尝试理解设计选择)。

首先,坐标系。我使用 Project Setup jar 创建了一个项目,它像这样创建了一个 OrthographicCamera

camera = new OrthographicCamera(1, h/w);

根据我的阅读,我了解到 LibGdx 将左下角用于 0,0 和 yUp。美好的。我发现如果我愿意,很容易更改为 y down,但我不理解创建的下一段代码。

对于创建的默认精灵,位置设置如下。

logoSprite.setOrigin(logoSprite.getWidth()/2, logoSprite.getHeight()/2);
logoSprite.setPosition(-logoSprite.getWidth()/2, -logoSprite.getHeight()/2);

当我运行这个基本程序时,我看到我添加的徽标图像位于屏幕中央。我想了解的是为什么设置位置的值是负数,为什么它使用精灵宽度和高度而不是视口的图形 w 和 h?如果我更改屏幕宽度和高度,则图像会绘制在屏幕右下角的某个奇怪位置。

我的下一个问题是 sprite.setSize 与 sprite.setScale。为什么两者之间有区别?(他们似乎做同样的事情,除了 setScale 保持 getWidth 和 getHeight 不变)。

由于我的游戏将大量使用 2D 相机进行平移、缩放和旋转,因此在开始编写任何代码之前,我会尽可能多地了解 libgdx 框架。

附带说明一下,我有游戏开发和数学背景,并且使用 XNA 制作了几款 2D 和 3D 游戏。我发现 LibGdx 有点令人沮丧,因为它并没有像我期望的那样抽象出 OpenGL,而且到目前为止,我一直在试验的 2D 绘图似乎比它应该的更令人困惑!

我还想指出,我计划在我的动画中使用脊椎。这是否应该改变我使用 y-up 或 y-down 的选择?

4

4 回答 4

7

如果您想在屏幕中心绘制精灵,请在您的 create 方法中执行此操作

logosprite.setposition(scrw/2-logosprite.getwidth()/2,scrh/2-logosprite.getheight/2);

这里的 scrw 是你的视口的宽度,

并且 sch 是您的视口的高度,

这样你的精灵就会在屏幕的中心

sprite.setsize用于设置精灵的大小,并sprite.setscale在我们缩放大/小纹理以使其质量在所有设备中保持良好时使用(hdpi.mdpi,xhdpi,ldpi)..

如果您使用的是 spin,则无需担心它在 libgdx 中运行顺畅。

于 2013-10-14T09:50:44.007 回答
1

如果可能,您可以只使用此代码

    logoSprite.setPosition(Gdx.graphics.getWidth()/2 - image.getWidth()/2, 
Gdx.graphics.getHeight()/2 - image.getHeight()/2);

将精灵置于屏幕中间,其中“图像”是您最初加载/声明的纹理。

至于为什么它出现在一个奇怪的位置是因为你使用的是相机。只需在此处查看有关相机的 libgdx 文档,即可大大改变视图

于 2013-10-14T08:51:32.443 回答
0

就我而言,我需要设置相机的位置,然后调用 update() 方法。然后永远不要忘记相机的(0,0)是它的中心。一切都是这样放置的。我的相机代码:

   private void cameralariUpdateEt() {
        cameraGame.position.set(cameraGame.viewportWidth * 0.5f,
                cameraGame.viewportHeight * 0.5f, 0);
        cameraGame.update();

        cameraScore.position.set(cameraScore.viewportWidth * 0.5f,
                cameraScore.viewportHeight * 0.5f, 0);
        cameraScore.update();
    }

从内部调用此方法 render();

于 2015-04-09T01:21:58.187 回答
0

第 1 步:将精灵原点设置为您希望它旋转的位置。

// camera center point is (c.x, c.y)
logoSprite.setOrigin(c.x, c.y);

第 2 步:确保将精灵中心设置为原点

logoSprite.setOriginCenter();

第三步:旋转你的精灵

logoSprite.setRotation(Angle);

第四步:设置精灵位置,[减去精灵宽度和高度的一半使精灵居中]

logoSprite.setPosition(c.x - logoSprite.getWidth() / 2, c.y - logoSprite.getHeight() / 2)
于 2020-05-08T18:38:02.310 回答