Java 使用LibGDX顺时针旋转图像
如何使用LibGDX顺时针旋转图像?我所看到的是,当加载图像时,假设有一颗星星,我需要将它从屏幕的开始水平旋转到屏幕的结束,星星旋转,我如何在libgdx中做到这一点?当您使用SpriteBatch绘制纹理时,您可以使用其中一个包含旋转的绘制功能。此javadoc具有所有绘图功能:Java 使用LibGDX顺时针旋转图像,java,android,libgdx,Java,Android,Libgdx,如何使用LibGDX顺时针旋转图像?我所看到的是,当加载图像时,假设有一颗星星,我需要将它从屏幕的开始水平旋转到屏幕的结束,星星旋转,我如何在libgdx中做到这一点?当您使用SpriteBatch绘制纹理时,您可以使用其中一个包含旋转的绘制功能。此javadoc具有所有绘图功能: 您可以为位置和旋转保留一个变量,并在每次渲染时增加位置的旋转和x分量,使其在水平移动时旋转。您还可以使用Scene2D动作。我这里有一个例子,小行星类型的东西从屏幕上掉下来并旋转 以下是旋转任何精灵的实现 batch
您可以为位置和旋转保留一个变量,并在每次渲染时增加位置的旋转和x分量,使其在水平移动时旋转。您还可以使用Scene2D动作。我这里有一个例子,小行星类型的东西从屏幕上掉下来并旋转
以下是旋转任何精灵的实现
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 --;
你也可以这样做: 关于创建方法
sprite.setOrigin(sprite.getWitdh() /2f, sprite.getHeight() /2f);
sprite.setPosition( 0, 200 ); //200 it's a example
在渲染上(浮动增量)
逆时针水平旋转。。 创建一个纹理区域 然后
Libgdx为您提供了不止一种方法: 您可以使用
Scene2D
并将图像
添加到阶段
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()
,它会更新位置、旋转、缩放。。。然后调用stage.draw()
,它将为所有Actor
调用draw()
。
Image allready处理draw()
,因此您不再需要关心这个问题
您也可以在不使用scene2d的情况下通过自己更新所有内容来完成此操作:
您可以以度/秒为单位存储int旋转速度
您可以以单位/秒存储int moveSpeed
(可能是像素,但我建议使用相机或视口,并使用您自己的单位,这在所有设备上都是相同的)
存储浮动角度
,它是纹理的当前旋转
并存储一个矢量2位置
,其中包含纹理的x和y位置
如果要在x和y方向移动,还可以存储一个矢量2方向
,这是一个标准化的矢量
,给出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);
angle+=delta*旋转速度;
盎格鲁%=360;//将角度限制为这里是一个在libgdx中旋转参与者的简单方法。首先,您需要设置原点:
img.setOrigin(getWidth/2,getHeight/2);
然后您可以根据需要顺时针和逆时针旋转:
img.rotate(2f); or img.rotate(-2f);
所以下面的示例对我有用(无限旋转)
方法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));
你的问题不是很清楚。您正在旋转纹理、精灵或图像吗?“从屏幕的开始到屏幕的结尾水平旋转,星星旋转”你的意思是希望星星在旋转时水平移动吗?@RahatAhmed:对不起,我有一个纹理,是的。我需要它在水平移动时旋转
img.setOrigin(getWidth/2,getHeight/2);
img.rotate(2f); or img.rotate(-2f);
loadingActor.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.rotateBy(360, 1)));
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));