LibGDX 1.5 如何让精灵绕其中心旋转?

4

我试图让一个精灵围绕其中心旋转,但无论我尝试什么,它总是围绕一个角落旋转。我按如下方式创建精灵:

Pixmap pixmap = new Pixmap(64, 64, Format.RGBA8888);
pixmap.setColor(153/255f, 255/255f, 153/255f, 255/255f);
pixmap.fillTriangle(0, 0, 0, 32, 32, 16);
Texture texture = new Texture(pixmap);
triangle = new Sprite(texture);
triangle.setSize(3, 3);
triangle.setOriginCenter();
triangle.setPosition(0 - triangle.getWidth() / 2.0f, 0 - triangle.getHeight() / 2.0f);

然后我按照以下方式每个deltaTime旋转它:

triangle.rotate(90 * deltaTime);

并将其渲染为以下内容:
batch.begin();
worldController.triangle.draw(batch);
batch.end();

我正在按照《学习LibGDX游戏开发,第二版》一书中的示例进行操作,因此我有一个WorldController和一个WorldRenderer。我错过了什么吗?将精灵原点设置为其中心并绘制它不就足够了吗?但是我得到的行为是这样的:enter image description here,而我希望它可以“原地”旋转。

我认为你所做的一切都是正确的。尝试将其从三角形更改为正方形,那样应该可以正确旋转。我觉得你的问题在于你的像素图的中心不是三角形的中心。 - Yani
你说得对,它可以正确地旋转一个正方形...那么我该怎么做才能让它也能处理一个三角形呢? - Pyrox
2个回答

1

看起来您错过了这行代码

triangle.setOrigin(originX, originY);

(originX, originY) 是你的三角形的中心坐标。

编辑:你当前代码不起作用的原因是因为当前中心原点是 (0, 0)。

(我不确定为什么,但当我测试你的代码时它似乎是中心)。 你可以通过使用

添加日志到你的代码中。
Gdx.app.log("Tag", "LogInformation");

这是您应该做的事情。
originX = (0+32)/2;
originY = (0+32)/2;

或者

originX = (lowestXValue+highestXValue)/2;
originY = (lowestYValue+heightYValue)/2;

这里是有关Sprite的API,它可以帮助你更好地使用rotate()函数。


1
setOriginCenter()和setOrigin(triangle.getWidth() / 2, triangle.getHeight() / 2)不是一样的吗?我也尝试了第二种方法,但没有任何变化。 - Pyrox

1

好的,我找到了问题所在。一开始我声明了一个32x32大小的像素图,并相应地填充了三角形。然后我乱搞了一下,将其大小改为了64x64,但是三角形是使用旧坐标绘制的,因此占据了整个像素图的左下“子正方形”,这就是它旋转的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接