How to rotate objects
Rotate an object to face a direction
Rotate an object instantly
An object can be instantly rotated with the Angle action. The action needs an angle value. This value can be calculated with the expression:
- Object.AngleToObject(object) to face an object
- Object.AngleToPosition(x, y) to face a position.
Rotate an object over time
Objects can be rotated at a given speed using the action Rotate toward position. Its position parameters can be set to
Object.Y() to turn in the direction of an object.
Object can also be rotated to a given angle with the Rotate toward angle. The angle can be
0 to face left,
90 to face down,
180 to face right,
270 to face up or any other value.
The tween behavior also allows to rotate objects. It has shapes of acceleration that can give more feeling to the rotation. It works well with still targets.
To follow a moving target and still give a smooth feeling to the rotation, the lerpAngle(start angle, destination angle, weight) expression can be used. For instance to follow an object, the Angle action can be used with the expression
lerpAngle(Object.Angle(), Object.AngleToObject(OtherObject), 5 * TimeDelta()).
The TimeDelta expression allows the rotation speed to be the same on any device. It's needed when using
lerpAngle because we evaluate the angle ourselves but it's not needed for actions like Rotate toward position that ask a speed.
Move an object on a circle
Angles could be compared as any other number but we often want to consider 90° and -270° as the same for instance. The AngleDifference(number, number) expression give the difference using the shortest way. To go back to the previous example,
AngleDifference(90, -270) equals
Compare two numbers condition can be used with
AngleDifference to check if 2 angles are the same.
It's usually a good practice to give some tolerance with an expression like
abs(AngleDifference(90, -270)) on one side and
5 to check the angle at + or - 5°.
Most movement behaviors have a Angle of movement condition that takes an angle and a tolerance directly.