在 Andengine 中旋转时移动修改器
MoveModifier while rotating in Andengine
我正在尝试制作枪的后退,为此枪应该旋转一点并向后退一点,然后它应该向前一点(模拟射击者的重新定位)。
使用 MoveByModier 执行此操作需要在每个 manageUpdate 和一些三角函数中更改它。如果我不这样做,我可以用 2 条路线(一个用于拉力的修改器,另一个用于重新定位),但它仍然很难
那么,是否有独立于位置和旋转的 MoveModifier?
一段时间后,我想出了如何制作 2 点动画。
public void drawback (Sprite sprite, float DeltaAngle, float drawback){
Vector2 center= new Vector2(sprite.getRotationCenterX(),sprite.getRotationCenterY());
Vector2 radiusPoint = new Vector2(sprite.getWidth(),sprite.getHeight());
float radius = radiusPoint.dst(center)/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT;
Vector2 currentPosition= new Vector2(sprite.getX(),sprite.getY());
Vector2 pointA = new Vector2(
(float)Math.cos(Math.toRadians(DeltaAngle/2+180))*drawback + Float.valueOf (sprite.getX()),
(float)Math.sin(Math.toRadians(DeltaAngle/2+180))*drawback + Float.valueOf (sprite.getY()) );
Vector2 pointB = new Vector2(
(float) Math.cos (Math.toRadians((DeltaAngle)))*radius + Float.valueOf (sprite.getX()),
(float) Math.sin (Math.toRadians((DeltaAngle)))*radius + Float.valueOf (sprite.getY()) );
sprite.registerEntityModifier(new ParallelEntityModifier(
new RotationByModifier(2,15),
new SequenceEntityModifier(
new PathModifier(.5f,new PathModifier.Path(
new float[]{currentPosition.x,pointA.x},
new float[]{currentPosition.y,pointA.y}))),
new PathModifier(1.5f,new PathModifier.Path(
new float[]{pointA.x,pointB.x},
new float[]{pointA.y,pointB.y}))
));}
我相信三角函数可以简化,但我会留给好奇的评论者
我正在尝试制作枪的后退,为此枪应该旋转一点并向后退一点,然后它应该向前一点(模拟射击者的重新定位)。
使用 MoveByModier 执行此操作需要在每个 manageUpdate 和一些三角函数中更改它。如果我不这样做,我可以用 2 条路线(一个用于拉力的修改器,另一个用于重新定位),但它仍然很难
那么,是否有独立于位置和旋转的 MoveModifier?
一段时间后,我想出了如何制作 2 点动画。
public void drawback (Sprite sprite, float DeltaAngle, float drawback){
Vector2 center= new Vector2(sprite.getRotationCenterX(),sprite.getRotationCenterY());
Vector2 radiusPoint = new Vector2(sprite.getWidth(),sprite.getHeight());
float radius = radiusPoint.dst(center)/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT;
Vector2 currentPosition= new Vector2(sprite.getX(),sprite.getY());
Vector2 pointA = new Vector2(
(float)Math.cos(Math.toRadians(DeltaAngle/2+180))*drawback + Float.valueOf (sprite.getX()),
(float)Math.sin(Math.toRadians(DeltaAngle/2+180))*drawback + Float.valueOf (sprite.getY()) );
Vector2 pointB = new Vector2(
(float) Math.cos (Math.toRadians((DeltaAngle)))*radius + Float.valueOf (sprite.getX()),
(float) Math.sin (Math.toRadians((DeltaAngle)))*radius + Float.valueOf (sprite.getY()) );
sprite.registerEntityModifier(new ParallelEntityModifier(
new RotationByModifier(2,15),
new SequenceEntityModifier(
new PathModifier(.5f,new PathModifier.Path(
new float[]{currentPosition.x,pointA.x},
new float[]{currentPosition.y,pointA.y}))),
new PathModifier(1.5f,new PathModifier.Path(
new float[]{pointA.x,pointB.x},
new float[]{pointA.y,pointB.y}))
));}
我相信三角函数可以简化,但我会留给好奇的评论者