2012-02-25 115 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));