[英]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都包含全局功率坐标(它们是相同的),因此我必须在它们之间插入绘图。
我检查了一下,两个代码段之间的唯一区别是,在第一个代码段中预先拉出了globalPosition
和globalPower
。
正如我所看到的,这仅给您带来几种可能性。
通过调用时间draw
, e.localPosition
和/或e.localForce
的值已更改。 我认为这是有可能的唯一方法是,如果您使用的库是多线程的。 我不熟悉box2d
或libgdx
所以我不能到这一点说话。
您已对应用程序的其他部分进行了更改,但未在此处进行复制/粘贴而导致了故障。
实际上,据我所知,这是唯一的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.