====== Part 9 – Physics ======
For our game we will need to add physics to keep our hero firmly on the ground.
The first thing to do is to enable physics in the config:
[Physics]
AllowSleep = false
Gravity = (0.0, 2400.0, 0.0)
This will set the strength and direction of the gravity and stops the physics being applied when objects settle. Our gravity will be pretty strong at 2400.
In order for physics to act on an object, the object needs to have a body. Let's add one to our hero:
[HeroObject]
Graphic = HeroGraphic
Position = (-350, 100, 0)
Scale = 2
AnimationSet = HeroAnimationSet
Body = HeroBody
Now to define the HeroBody section:
[HeroBody]
Dynamic = true
PartList = HeroBodyPart
Dynamic means that the object is affected by physics and gravity. Each Body must have at least one body part. Define that next:
[HeroBodyPart]
Type = box
Solid = true
The type is ''box'' and that means the collision area is a box shape surrounding the object. The part is also set to solid. That means that the object will not be able to pass through other solid body parts.
Run that and you'll see our hero fall right through the floor. So that's good. The physics body is working. But we need to get the platforms solid too.
[PlatformObject]
Graphic = PlatformGraphic
Position = (-400, 270, 0)
Scale = (54, 2, 0)
Repeat = (27, 1, 0)
Body = PlatformBody
Now the body and body part for a platform object:
[PlatformBody]
Dynamic = false
PartList = PlatformBodyPart
[PlatformBodyPart]
Type = box
Solid = true
Notice the slight difference from the ''HeroBody''? The ''PlatformBody'' is not dynamic, so it won't be affected by gravity. But the ''PlatformBodyPart'' is set to solid. This will allow the hero to collide with the platform without it falling away.
//But the two won't affect each other until you set collision flags.//
First, set the flags on the HeroBodyPart:
[HeroBodyPart]
Type = box
Solid = true
SelfFlags = hero
CheckMask = platforms
The ''SelfFlags'' property is a string that describes the object and the ''CheckMask'' is a mask list of other object self flags it can collide with.
Now set the ''PlatformBodyPart'' flags:
[PlatformBodyPart]
Type = box
Solid = true
SelfFlags = platforms
CheckMask = hero
So both objects are set to collide with each other.
Run the game and our hero will land and stay on the floor.
Our guy lands and stays on the floor. Good.
You can turn on physics debug mode if you want to see the bounding boxes around the objects. Turn on the physics debug with:
[Physics]
AllowSleep = false
Gravity = (0.0, 2400.0, 0.0)
ShowDebug = true
You can see the boxes that surround the hero and platforms. That is because they have bodies.
Run that up and you should get the following:
{{:guides:beginners:beginners-30-gravity.png?nolink|}}
Much better. Don't forget to turn off the physics debugging before continuing.
----
Next, [[en:guides:beginners:input_controls|Part 10 - Input Controls]].
{{section>en:guides:beginners:toc&noheader&nofooter&noeditbutton}}