我有一艘宇宙飞船,那艘宇宙飞船在太空中 360 度移动。
宇宙飞船需要 2d 中的推力动画。信任动画需要位于飞船底部的中线。我有以下变量。
_Rotation
_Spaceship.width
_Spaceship.height
_Spaceship.Position(x,y)
我也上传了我的问题的图片,以防人们不理解我的错误解释:
两个动画都像这样渲染:
this._itemAnimation.render(this.getPosition(), canvas, this._degrees);
this._thrustAnimation.render(this.thrustPosition(), canvas, this._degrees);
到目前为止我已经尝试过并且失败了:
_thurstPosition.set(((int)_object_x + Math.cos(_degrees) * _itemAnimation.getWidth() / 2) ,
((int)_object_y + Math.sin(_degrees) * _itemAnimation.getWidth() / 2));
我失败了,有人帮助我。
- - 更新 - -
我已经更新了代码,以便更好地理解:
int SpaceshipCenterX = getPosition().x + (_SpaceshipAnimation.getWidth() / 2) - (_thrustAnimation.getWidth() / 2);
int SpaceshipCenterY = getPosition().y + ((_SpaceshipAnimation.getHeight() / 2) - (_thrustAnimation.getHeight() / 2));
double OffSetCos = Math.cos(_spaceshipDegrees);
double OffSetSin = Math.sin(_spaceshipDegrees);
_thurstPosition.set
(
(int)(SpaceshipCenterX + (SpaceshipAnimation.getWidth() / 2) * OffSetCos)
,
(int)(SpaceshipCenterY + (SpaceshipAnimation.getHeight() / 2) * OffSetSin)
);
我仍然无法得到它的工作。它绕着宇宙飞船转,但速度非常快,到处都在闪烁。
--- 更新 2 ---
这几乎可以工作,但它太过分了:
int xOffset = -1 * (_itemAnimation.getWidth() / 2);
double DegreeToRadien = Math.toRadians(_degrees);
_thurstPosition.set
(
(int)(((xOffset) * Math.cos(DegreeToRadien)) + getPosition().x),
(int)(((xOffset) * Math.sin(DegreeToRadien)) + getPosition().y)
);