2012-02-25 127 views
5

如何使用LibGDX顺时针旋转图像?我看的是一个图像加载时,假设一个星星,我需要旋转它从屏幕开始水平结束,与星旋转,我怎么能在libgdx中做到这一点?使用LibGDX顺时针旋转图像

+0

你的问题不是很清楚。你在旋转纹理,精灵还是图像?通过“从屏幕开始到屏幕水平结束旋转,星形旋转”,你是否想要恒星在旋转时水平移动? – 2012-02-25 14:57:01

+0

@RahatAhmed:对不起,我有一个纹理,是的,我需要它旋转,而水平移动 – 2012-02-25 14:58:28

回答

10

当您使用SpriteBatch绘制纹理时,可以使用其中一个包含旋转的绘制函数。这Javadoc开始所有的抽奖功能:SpriteBatch

你可以把一个变量的位置和旋转,并在每次渲染,使其旋转,同时水平移动时提高位置的旋转和x分量。

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; 
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); 
1

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

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

Libgdx给你做的更多,其中一个方法: 您可以使用Scene2D并将Image添加到您的StageImageActor子类,所以你可以添加Action s到它:

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 S的,然后调用stage.draw()这将为您所有的Actor s调用draw()。 图像已经处理了draw(),所以你不需要再关心它了。

你也可以不用scene2d,自己更新的一切:
可以存储在度int rotationSpeed /秒
可以存储int moveSpeed在单位/秒(也许像素,但我会建议用相机或视口并使用您自己的设备,这在所有设备上都相同)
存储float angle,这是Texture 的当前旋转并存储Vector2 position,其中包含您的Texture的x和y位置。
如果你想要在x和y方向移动,你还可以存储一个Vector2 direction,这是一个规范化的Vector,它给出了x和y方向的移动百分比,但那是一个不同的故事。

然后在你的​​更新的一切:

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); 

顺时针旋转只需使用一个负rotationSpeedangle-=更换angle+=

希望它有帮助。

0

这是一个简单的在libgdx中旋转actor。首先,你需要设置的由来:

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

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

img.rotate(2f); or img.rotate(-2f); 
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));