繁体   English   中英

LibGDX Box2d getWorldPoint问题

[英]LibGDX Box2d getWorldPoint issue

我刚刚开始使用LibGDX和Box2d开发新的Android游戏。 目前,我有一个船类,其中包含对船体的引用以及与该船相连的发动机阵列。 出于调试目的,我想绘制引擎的位置及其力矢量的峰值(以红色正方形表示),首先我尝试了此代码

public void draw(Batch batch, float parentAlpha)
{
    for(AttachedEngine e : Engines)
    {
            Vector2 globalPosition = body.getWorldPoint(e.localPosition);
            Vector2 globalPower = body.getWorldPoint(e.localForce);
            batch.draw(img, Gdx.graphics.getWidth()/2 + globalPosition.x, Gdx.graphics.getHeight()/2 + globalPosition.y, 5, 5);
            batch.draw(img, Gdx.graphics.getWidth()/2 + globalPower.x, Gdx.graphics.getHeight()/2 + globalPower.y, 5, 5);
    }
}

但是它导致我的方块在错误的位置(不起作用),然后我尝试了这段代码

public void draw(Batch batch, float parentAlpha)
{
    for(AttachedEngine e : Engines)
    {
            batch.draw(img, Gdx.graphics.getWidth()/2 + body.getWorldPoint(e.localPosition).x, Gdx.graphics.getHeight()/2 + body.getWorldPoint(e.localPosition).y, 5, 5);
            batch.draw(img, Gdx.graphics.getWidth()/2 + body.getWorldPoint(e.localForce).x, Gdx.graphics.getHeight()/2 + body.getWorldPoint(e.localForce).y, 5, 5);
    }
}

而且有效。 你们能解释一下为什么这些代码有所不同吗? 第一种解决方案对我来说更自然,但我不知道为什么它不起作用。 答案似乎微不足道,但我太困惑了。 这是自几年编程以来的第一次,我实际上真的不知道发生了什么,而且我找不到关于stackoverflow的解决方案,所以我不得不问你们

编辑

它以这种方式工作:

public void draw(Batch batch, float parentAlpha)
{
    for(AttachedEngine e : Engines)
    {
            Vector2 globalPosition = body.getWorldPoint(e.localPosition);
            batch.draw(img, Gdx.graphics.getWidth()/2 + globalPosition.x, Gdx.graphics.getHeight()/2 + globalPosition.y, 5, 5);
            Vector2 globalPower = body.getWorldPoint(e.localForce);
            batch.draw(img, Gdx.graphics.getWidth()/2 + globalPower.x, Gdx.graphics.getHeight()/2 + globalPower.y, 5, 5);
    }
}

我也发现,当我在globalPostion之后(如代码的第一部分)初始化初始化globalPower时

            Vector2 globalPosition = body.getWorldPoint(e.localPosition);
            Vector2 globalPower = body.getWorldPoint(e.localForce);

两个vect2都包含全局功率坐标(它们是相同的),因此我必须在它们之间插入绘图。

我检查了一下,两个代码段之间的唯一区别是,在第一个代码段中预先拉出了globalPositionglobalPower

正如我所看到的,这仅给您带来几种可能性。

  1. 通过调用时间drawe.localPosition和/或e.localForce的值已更改。 认为这是有可能的唯一方法是,如果您使用的库是多线程的。 我不熟悉box2dlibgdx所以我不能到这一点说话。

  2. 您已对应用程序的其他部分进行了更改,但未在此处进行复制/粘贴而导致了故障。

实际上,据我所知,这是唯一的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM