-2

所以我的问题是我试图在屏幕中间放置一个精灵。如何做到这一点非常简单,但是在运行时进行的计算是错误的。我得出的结论是,浮点数在 Java 中变得混乱。

所以,这是我现在拥有的代码,它有效:

float posX = ((1280f / 2f) - 128f);
float posY = ((720f / 2f) - 112.5f);
splash.setScale(1.5f);
splash.setPosition((posX), (posY));

但是,如果我用这些变量替换上面的分区:

private float screenCenterW = (1280.0f / 2f);
private float screenCenterH = (720.0f / 2f);
private float splashCenterW = (225.0f / 2f);
private float splashCenterH = (256.0f / 2f);

事情似乎不再起作用了。在我看来,posX 和 posY 计算的第一部分结果为 0.0,而我的精灵最终出现在左上角,半可见。

为什么如果我用这些变量替换不同的计算,它就会停止工作?

编辑:

所以澄清一下:

这就是我希望代码的样子:

private float screenCenterW = (1280.0f / 2f);
private float screenCenterH = (720.0f / 2f);
private float splashCenterW = (225.0f / 2f);
private float splashCenterH = (256.0f / 2f);
float posX = (screenCenterW - splashCenterW);
float posY = (screenCenterH - splashCenterH);
splash.setScale(1.5f);
splash.setPosition((posX), (posY));

然而,这会使事情出错。尽管对我来说,它们看起来与其他计算完全相同。我在某个地方犯了一个菜鸟错误吗?我一直在用数字从底部到顶部构建这个计算,它可以工作,但是一旦我用变量替换其中一个计算(将它保存在变量中)它就会停止工作,并且精灵会消失screen,好像 screenCenterW 和 screenCenterH 通过 2f 的除法计算为 0.0。screenWidthH 示例:(1280f / 2f) = 0 | 0 - 112.5f = -112.5f

为什么我在调试时遇到问题是因为我不知道如何在我正在使用的 AndEngine for Android 的屏幕上显示这些计算。对于没有详细说明,我真诚地道歉,我现在意识到这个问题一开始并没有说太多,但我希望这能澄清我的问题。如果有人使用 AndEngine 可以帮助我,那就太棒了。

4

2 回答 2

1

您显示的代码太少,无法告诉您哪里出错了,但我怀疑您要么在某个地方更改变量而没有注意,要么您有一个类初始化顺序问题(您在实际计算变量之前使用它们)。

要排除意外更改,请将变量声明为final

 private final float screenCenterW = (1280.0f / 2f);

如果您在任何地方分配它们,编译器会抱怨它。

初始化顺序更难追踪,您可以在使用变量之前使用条件检查:

 if (screenCenterW == 0) {
     throw new RuntimeException("Something is horribly wrong!");
 }

如果异常触发,您应该在 IDE 的控制台窗口中看到异常。

于 2013-08-15T17:40:03.240 回答
0

计算没有任何问题。你这样做的方式是正确的,你可以测试它:

public static void main(String[] args) {
        float screenCenterW = (1280.0f / 2f);
        float screenCenterH = (720.0f / 2f);
        float splashCenterW = (225.0f / 2f);
        float splashCenterH = (256.0f / 2f);

        System.out.println(screenCenterW);
        System.out.println(screenCenterH);
        System.out.println(splashCenterW);
        System.out.println(splashCenterH);
    }

输出:

640.0
360.0
112.5
128.0

显示其余代码。

于 2013-08-15T16:44:33.430 回答