让我们假设有一些错误从外面进入屏幕。为此,我们需要有4个坐标(StartX,StartY,TargetX,TargetY)。如何将错误旋转到适当的方向?几个小时以来我一直在搞乱这个问题,而且一直无法弄清楚这一部分。所以bug会进入屏幕,但它没有面向正确的方向。 (四个坐标是随机数)。
我正在学习在学校学到的线条渐变:
int deltaY = TargetY - StartY;
int deltaX = TargetX - StartX;
float gradient = (float)deltaY / (float)deltaX;
然后旋转bug的角度:
float angle = (float) (Math.atan(gradient) * 180 / PI);
然后是旋转和移动修改器:
registerEntityModifier(new RotationModifier(0.3f, 0, angle) {
@Override
protected void onModifierFinished(IEntity pItem) {
super.onModifierFinished(pItem);
registerEntityModifier(new MoveModifier(0.8f, StartX, TargetX, StartY, TargetY) {
@Override
protected void onModifierFinished(IEntity pItem) {
super.onModifierFinished(pItem);
}
});
}
});
解决方案更复杂,因为在一定梯度的线上,bug可以来自两个方向,因此它可以面向两个方向。 我知道1/2的梯度意味着26.56度,而在AndEngine坐标系中它意味着-26.56或-206.56度,具体取决于bug来自哪一侧。
答案 0 :(得分:3)
尝试这样的事情:
float bugAngle = 180 + (float) Math.toDegrees(Math.atan2((targetY - bugSprite.getRotationCenterY() - startY), (targetX - bugSprite.getRotationCenterX() - startX)));
bugSprite.setRotation(bugAngle);
请原谅长线死亡。
答案 1 :(得分:0)
尝试更简单:
float angle = getAngle(StartX, TargetX , StartY, TargetY );
YourSprite.setRotation((int) angle);
Brokap:D