Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用LibGDX顺时针旋转图像_Java_Android_Libgdx - Fatal编程技术网

Java 使用LibGDX顺时针旋转图像

Java 使用LibGDX顺时针旋转图像,java,android,libgdx,Java,Android,Libgdx,如何使用LibGDX顺时针旋转图像?我所看到的是,当加载图像时,假设有一颗星星,我需要将它从屏幕的开始水平旋转到屏幕的结束,星星旋转,我如何在libgdx中做到这一点?当您使用SpriteBatch绘制纹理时,您可以使用其中一个包含旋转的绘制功能。此javadoc具有所有绘图功能: 您可以为位置和旋转保留一个变量,并在每次渲染时增加位置的旋转和x分量,使其在水平移动时旋转。您还可以使用Scene2D动作。我这里有一个例子,小行星类型的东西从屏幕上掉下来并旋转 以下是旋转任何精灵的实现 batch

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

当您使用SpriteBatch绘制纹理时,您可以使用其中一个包含旋转的绘制功能。此javadoc具有所有绘图功能:


您可以为位置和旋转保留一个变量,并在每次渲染时增加位置的旋转和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));