使用LibGDX顺时针旋转图像

时间:2012-02-25 14:53:36

标签: java android libgdx

我们如何使用LibGDX顺时针旋转图像?我正在寻找的是当一个图像加载时,假设一个星星,我需要将它从屏幕的开头水平旋转到屏幕的末端,星星旋转,我怎么能在libgdx中做到这一点?

8 个答案:

答案 0 :(得分:10)

使用SpriteBatch绘制纹理时,可以使用包含旋转的绘图功能之一。这个javadoc具有所有绘制函数:SpriteBatch

您可以为位置和旋转保留一个变量,并在每次渲染时增加位置的旋转和x分量,使其在水平移动时旋转。

答案 1 :(得分:4)

Libgdx为您提供了多种方法: 您可以使用Scene2D并向Image添加StageImageActor的子类,因此您可以向其添加Action

Image myImage = new Image(myTexture);
myImage.addAction(Actions.parallel(Actions.moveTo(endX, endY, duration), Actions.rotateBy(degrees, duration)));
myImage.setPosition(startX, startY);
myImage.setOrigin(sizeX/2, sizeY/2);
stage.add(myImage);

render中,您可以拨打stage.act(),更新所有Actor的位置,轮播,比例...然后拨打stage.draw()所有draw()的{​​{1}}。 图像已经处理Actor,因此您不再需要关心它了。

您也可以在没有draw()的情况下通过自己更新所有内容来实现:
您可以以度/秒为单位存储scene2d 您可以以单位/秒存储int rotationSpeed(可能是像素,但我建议使用相机或视口并使用您自己的单位,这在所有设备上都相同)
存储int moveSpeed,这是float angle的当前轮播 并存储Texture,其中包含Vector2 position的x和y位置 如果你想在x和y方向上移动,你也可以存储一个Texture,这是一个标准化的Vector2 direction,给出了x和y方向的移动百分比,但这是一个不同的故事。

然后在Vector中更新所有内容:

render(float delta)

对于顺时针旋转,只需使用否定angle+=delta*rotationSpeed; angl%=360; // Limits the angle to be <= 360 while (angle < 0) // Unfortunally the "modulo" in java gives negative result for negativ values. angle+=360; position.x+=direction.x*moveSpeed*delta; position.y+=direction.y*movSpeed*delta; spriteBatch.draw(yourTextureRegion, position.x, position.y, sizeX/2, sizeY/2, sizeX, sizeY, scaleX, scaleY, angle); 或将rotationSpeed替换为angle+=

希望它有所帮助。

答案 2 :(得分:3)

以下是旋转任何精灵的实现

batch.draw(sprite,(Gdx.graphics.getWidth() - sprite.getRegionWidth()) / 2.0f,(Gdx.graphics.getHeight() - sprite.getRegionHeight()) / 2.0f,sprite.getRegionWidth()/2.0f,sprite.getRegionHeight()/2.0f, sprite.getRegionWidth(), sprite.getRegionHeight(), 1f, 1f,count, false);

if(count < 0.0f)
count = 360.0f;
else
count --;

最初设置计数器

private float count =360.0f;

答案 3 :(得分:1)

您还可以使用Scene2D操作。我在这里有一个例子,小行星型物体从屏幕上掉下来并旋转。

http://www.netthreads.co.uk/2012/02/09/libgdx-scene2d-demo-with-scene-transitions/

答案 4 :(得分:1)

逆时针和水平旋转.. 创建一个textureRegion 然后

Sprite sprite = new Sprite(textureRegion, 0, 0, 128, 128);
sprite.setPosition(++mX, 0);
angle++;
sprite.setRotation(angle);
sprite.draw(batcher);

答案 5 :(得分:0)

你也可以这样做:

在您的创建方法

sprite.setOrigin(sprite.getWitdh() /2f, sprite.getHeight() /2f);
sprite.setPosition( 0, 200 ); //200 it's a example
你的渲染上的

(浮动三角洲)

sprite.setX( sprite.getX() + delta ).setRotation( sprite.getRotation() + delta ); 

答案 6 :(得分:0)

这是一个在libgdx中旋转actor的简单方法。首先,您需要设置原点:

img.setOrigin(getWidth/2,getHeight/2);

然后你可以根据需要顺时针和逆时针旋转:

img.rotate(2f); or img.rotate(-2f);

答案 7 :(得分:0)

以下示例适用于我(无限旋转)

方法1 :(推荐)

loadingActor.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.rotateBy(360, 1)));

方法2:

Image loadingActor = new Image(AssetsController.getInstance().getLoading());
loadingActor.setOrigin(Align.center);
final SequenceAction infiniteRotate = Actions.sequence();
infiniteRotate.addAction(Actions.rotateTo(0 , 0f) );
infiniteRotate.addAction(Actions.rotateTo(360 , 1f) );
loadingActor.addAction(Actions.forever(infiniteRotate));