LibGDX 1.5围绕其中心旋转精灵

时间:2015-04-13 16:38:55

标签: java android rotation libgdx sprite

我试图围绕它的中心旋转精灵,但无论我尝试什么,我总是让它绕着角落旋转。我用这种方式创建了精灵:

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

虽然我希望它“就地”旋转。

2 个答案:

答案 0 :(得分: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;

Here是Sprite上的API,它可以帮助您更多地使用rotate()

答案 1 :(得分:1)

好的,我发现了问题。起初我宣布像素图的大小为32x32并相应地填充三角形。然后我正在搞乱它并将大小改为64x64,但三角形是使用旧坐标绘制的,因此占据了整个像素图的左下角“子方格”,这就是它以这种方式旋转的原因。