如何使用LibGDX顺时针旋转图像?我看的是一个图像加载时,假设一个星星,我需要旋转它从屏幕开始水平结束,与星旋转,我怎么能在libgdx中做到这一点?使用LibGDX顺时针旋转图像
回答
当您使用SpriteBatch绘制纹理时,可以使用其中一个包含旋转的绘制函数。这Javadoc开始所有的抽奖功能:SpriteBatch
你可以把一个变量的位置和旋转,并在每次渲染,使其旋转,同时水平移动时提高位置的旋转和x分量。
您还可以使用Scene2D操作。我在这里有一个例子,小行星类的东西掉在屏幕上并旋转。
http://www.netthreads.co.uk/2012/02/09/libgdx-scene2d-demo-with-scene-transitions/
以下是实现转动的任何精灵
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;
你也一样可以做到这样的:在您创建
方法
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);
逆时针旋转和水平.. 创建textureRegion 然后
Sprite sprite = new Sprite(textureRegion, 0, 0, 128, 128);
sprite.setPosition(++mX, 0);
angle++;
sprite.setRotation(angle);
sprite.draw(batcher);
Libgdx给你做的更多,其中一个方法: 您可以使用Scene2D
并将Image
添加到您的Stage
。 Image
是Actor
子类,所以你可以添加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);
顺时针旋转只需使用一个负rotationSpeed
或angle-=
更换angle+=
。
希望它有帮助。
这是一个简单的在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));
你的问题不是很清楚。你在旋转纹理,精灵还是图像?通过“从屏幕开始到屏幕水平结束旋转,星形旋转”,你是否想要恒星在旋转时水平移动? – 2012-02-25 14:57:01
@RahatAhmed:对不起,我有一个纹理,是的,我需要它旋转,而水平移动 – 2012-02-25 14:58:28