当我想使用RotateToAction
旋转演员时,例如从0度到300度,演员旋转300度(duh),但逆时针旋转60度也是如此,这就是我想要的。
如果我使用RotateByAction
并将角度设置为负60度,我会得到我的演员的负旋转值,这也不是我想要的。
那么如何使用任一动作将我的演员旋转到某个角度,总是使用最短的旋转并保持0到360之间的正旋转值?
答案 0 :(得分:0)
不清楚你的意思是"保持正旋转值"。如果要将actor旋转到270度,可执行的最短旋转为-90度。逆时针旋转本质上是负面的......
假设您只想指定 0到360之间的度数值,并让 actor 弄清楚是顺时针还是逆时针旋转,您可以尝试写你自己的行动。这样的事情怎么样?
public class MyRotateAction extends Action {
private Actor actor;
private int finalDegrees;
public MyRotateAction(Actor actor, int finalDegrees) {
this.actor = actor;
this.finalDegrees = finalDegrees;
}
@Override
public boolean act(float delta) {
if (finalDegrees - actor.getRotation() > 180) { //perform negative rotation
actor.addAction(rotateBy(actor.getRotation() - finalDegrees));
} else { //perform positive rotation
actor.addAction(rotateBy(finalDegrees - actor.getRotation());
}
}
}
答案 1 :(得分:0)
尝试将角色与0到360之间的值保持一致,这取决于游戏的一切:
float a = actor.getRotation();
if(a > 360)
a -= 360;
if(a < 0)
a += 360;
actor.setRotation(a);
找到要旋转到的最接近的角度值,其距离演员角度小于或等于180°,例如:
float degrees = angle_to_rotate_to;
float a = actor.getRotation();
if(degrees-a < 180) degrees += 360;
if(degrees-a > 180) degrees -= 360;
或者,如果您不想将演员角度限制为0和360:
float degrees = angle_to_rotate_to;
float a = actor.getRotation();
while (degrees-a < 180) degrees += 360;
while (degrees-a > 180) degrees -= 360;