by Jon (Updated on 2015-10-20)
What good is a physics game if you can’t make things move?
In Stencyl, you can move an Actor in one of three ways:
On top of this, you can rotate an Actor in a similar set of ways:
The position of an Actor is its location within a scene, measured in X (horizontal) and Y (vertical) coordinates. (0,0) corresponds to the top left corner of the scene.
You can set an Actor’s position using the “Set X/Y to” block under Actor > Position.
You can get the Actor's position using the "Get X/Y" block under Actor > Position.
Note: The dropdown has variants for grabbing the "center" x and y positions too.
You'll find that while setting an Actor's position is a simple and easy way of moving an Actor, it comes with drawbacks depending on the game you're making.
Problems come about if you're making a game that leans on physics. Let's take a simple example.
Imagine that you've got an Actor that moves across a floor towards a wall.
To move the Actor, you are incrementing its position like this. (In short, x = x + 10)
You now test the game and notice that the ball sails right past the wall as if it weren't there. What happened?
Because setting positions is like teleporting. The actor isn't smoothly moving towards the right. He's teleporting to the right in steps, big enough steps that he skips the wall entirely, and no collisions are recorded.
So what's the bottom line? The bottom line is to avoid setting an Actor's position when you're trying to achieve constant motion.
If you're trying to teleport an actor, or if the game isn't quite so physical in nature (an RPG), then setting an actor's position is appropriate.
Velocity is the speed of an object in a given direction.
Set an Actor’s X/Y speed using the “Set X/Y speed to” block under Actor > Motion.
Reminder about Directions
Value | Direction |
---|---|
Positive X | Right |
Negative X | Left |
Positive Y | Down |
Negative Y | Up |
Note: The unit of speed in Stencyl is 10 pixels per second.
If you prefer setting the Velocity in terms of a direction and speed, we have a block for that too under Actor > Motion.
Note: Direction is in degrees (0 - 360). 0 degrees is right. Angle sweeps clockwise, so 90 degrees would be down.
In some cases we may also want to find out how fast an Actor is traveling in a given direction. We can do this by using the “X/Y speed of” block under Actor > Motion.
What is a force? In Stencyl terms, a force is something that pushes an object in a given direction with a certain magnitude (the strength/power).
Note: Forces are always applied relative to the Center of Mass.
You can push an object towards a given point using the “Push toward [X, Y]” block. (Actor > Motion)
The "strength" of the force is something you'll have to experiment with to pin down a good value. Bear in mind that like real forces, the mass of the target Actor will determine just how effective your push is. We'll talk about setting the Actor's mass in the Physics lesson.
Reminder about Directions
Value | Direction |
---|---|
Positive X | Right |
Negative X | Left |
Positive Y | Down |
Negative Y | Up |
You can push an object in a given direction using the “Push toward [angle]” block. (Actor > Motion)
Note: Angle is in degrees (0 - 360). 0 degrees is right and sweeps clockwise. What would 90 degrees be?
When using any force block, you are given the option to push an object either gently or sharply.
Gently is basically like having a bumper - it applies the force over a longer time, while sharply applies it all at once, like a head-on crash!
The bottom line is that the two methods differ a lot, and you should experiment and see what works for your game. There's no correct answer.
Explained: The difference goes into elementary physics. Recall the concept of an "impulse" and that may conjure up fond memories of crashing cars and bumpers. You learned that the "severity" of a collision depended on how "long" the collision took. This is why cars have bumpers, to lengthen the collision by spreading out the force's application over longer time.
Generally speaking, forces are the most natural way of moving objects. Everything "just works" like it does in real life. You don't need to be explicit about everything.
Examples: Wind, conveyor belts, platforms.
Velocity is good if you need to maintain a certain speed or require more control over an object's motion.
Example: 4 way motion in an RPG
To sum it up, it's a tradeoff between having more control (and responsibilities) or less. There's no right answer. Just experiment and see what works best for your game.
The direction of an Actor is the angle it's facing. By default, actors have a direction of 0 degrees (facing right).
Note: Clockwise is positive. Counter-clockwise is negative.
This block instantly sets the Actor's direction to the given amount in degrees. (under Actor > Position)
The following 2 blocks instantly rotate the Actor clockwise and counter-clockwise respectively. (under Actor > Position)
Returns the direction, in degrees. (under Actor > Position)
Turning speed dictates how quickly an actor rotates.
The following 2 blocks (under Actor > Motion) set the turning speed and get it, respectively.
Note: Clockwise is positive. Counter-clockwise is negative.
You can also rotate, or twist, an object with a given force using the “twist” block. This is like twisting the cap off a jar.
Much like the distinction between Velocity and Forces, the same kinds of differences between Turning Speed and Twisting apply here.
The following block twists an actor (under Actor > Motion). There's, curiously, no notion of gently/sharply here since Box2D does not provide it.