簡體   English   中英

使用LibGDX順時針旋轉圖像

[英]Rotate Image Clockwise using LibGDX

如何使用LibGDX順時針旋轉圖像? 我正在查看的是加載圖像時(假設是星星),我需要將其從屏幕的開頭水平旋轉到屏幕的末端,同時星星旋轉,我該如何在libgdx中做到這一點?

使用SpriteBatch繪制紋理時,可以使用包含旋轉功能的繪制功能之一。 此javadoc具有所有繪制函數: SpriteBatch

您可以保留位置和旋轉的變量,並在每次渲染時增加位置的旋轉和x分量以使其在水平移動時旋轉。

Libgdx為您提供了更多的一種實現方法:您可以使用Scene2D並將Image添加到Stage ImageActor的子類,因此可以向其添加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() ,它將為所有Actor調用draw() 圖像已經准備好處理draw()因此您不再需要關心它。

您也可以在不使用scene2d情況下自己進行更新:
您可以存儲int rotationSpeed以度/秒為單位
您可以將int moveSpeed存儲為單位/秒(也許是像素,但我建議使用攝像頭或視口並使用自己的單位,在所有設備上均相同)
存儲float angle (即Texture的當前旋轉)並存儲Vector2 position (其中包含Texture的x和y位置)。
如果要在x和y方向上移動,還可以存儲Vector2 direction (這是歸一化的Vector ,給出x和y方向上的移動百分比,但這是一個不同的故事。

然后在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+=替換為angle-=

希望能幫助到你。

以下是旋轉任何精靈的實現

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;

要逆時針旋轉和水平旋轉..創建一個textureRegion然后

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

您也可以使用Scene2D操作。 我這里有一個例子,小行星類型的東西從屏幕上掉下來旋轉。

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

您也可以這樣做:

在您的創建方法上

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

在libgdx中旋轉actor很簡單。 首先,您需要設置原點:

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

然后您可以根據需要順時針和逆時針旋轉:

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

因此以下示例對我有用(無限旋轉)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM