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
с, а затем позвоните stage.draw()
, что вызовет draw()
для всех ваших Actor
с.Image уже обрабатывает draw()
, поэтому вам больше не нужно об этом заботиться.
Вы также можете сделать это без scene2d
, обновив все самостоятельно:
Вы можете сохранить int rotationSpeed
в градусах / с
Вы можете сохранить int moveSpeed
в единицах / с (возможно, в пикселях, но я бы посоветовал использовать камеру или область просмотра и использовать свой собственный модуль, равный на всех устройствах)
Сохранить float angle
, который является текущим поворотом вашего Texture
и сохраните Vector2 position
, который содержит позиции x и y вашего Texture
.
Если вы хотите двигаться в направлении 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-=
.
Надеюсь, это поможет.