Quick answer: The player falls through the ground because the ground object is missing the Solid behavior, the collision polygons have gaps, or you are using Jump-thru when you need Solid. For moving platforms, the platform must move via Set Position actions and the player’s Platform behavior needs proper floor detection margins.
Your player lands on a platform and immediately falls straight through it as if it does not exist. Or they stand on the ground for a moment, then suddenly clip through and drop into the void. This is one of the most common issues in Construct 3 platformers, and it can have several distinct causes depending on your setup. Let us work through each one systematically.
The Symptom
You have a sprite with the Platform behavior and a ground object (Tiled Background, Sprite, or Tilemap) that the player should stand on. In the layout editor, everything looks correct — the player is positioned above the ground and the ground appears solid. But when you preview the project, the player falls through the ground as if it is not there.
Variations of this symptom include: the player stands on the ground but falls through at specific positions (usually at tile seams); the player falls through only when moving at high speed; the player works on static ground but falls through moving platforms; or the player can stand on flat ground but slides through or falls off sloped surfaces.
There are no error messages. The Platform behavior simply does not recognize the ground object as an obstacle.
What Causes This
There are six common causes, and they often combine in ways that make diagnosis tricky:
1. Ground object is missing the Solid behavior. This is the most frequent cause. The Platform behavior in Construct 3 does not use collision detection on its own. It only recognizes objects that have either the Solid behavior or the Jump-thru behavior. Without one of these, the platform character treats the object as empty space, no matter what its collision polygon looks like.
2. Collision polygon gaps between tiles. When you use a Tiled Background or place multiple Sprite tiles side by side to form the ground, the collision polygons of adjacent tiles must meet perfectly at the edges. If there is even a 1-pixel gap between the polygons, the player can slip through at that exact position. This is especially common with custom collision polygons that do not extend to the full edge of the sprite frame.
3. Jump-thru used instead of Solid. The Jump-thru behavior only blocks movement from above. If the player approaches the platform from the side or from below at an angle, they can pass through. If you want a surface that blocks from all directions, you need Solid, not Jump-thru.
4. Slope angle exceeds Max Floor Slope. The Platform behavior has a Max Floor Slope property (default 50 degrees). If your ground surface has an angle steeper than this value, the Platform behavior treats it as a wall rather than a floor. The player slides down instead of standing on it, and at extreme angles, they can clip through entirely.
5. Moving platform position updates. If a moving platform changes position using physics or tweening rather than direct Set Position actions, the Platform behavior may not detect the floor correctly. The behavior checks for solid ground at the start of each tick, and if the platform has moved between ticks in a way that leaves a gap, the player falls through.
6. High player speed causes tunneling. When the player moves very fast (either falling with high gravity or moving horizontally at high max speed), they can move far enough in a single tick to pass entirely through a thin platform. The collision check at the start and end of the tick both show open space, so no collision is registered.
The Fix
Step 1: Add the Solid behavior to your ground objects. Select the ground object in the layout or project bar. In the Properties panel, click Behaviors and add Solid. This is the single most common fix.
// Verify at runtime that your ground has the Solid behavior
// Add this to an On Start of Layout event:
System > For Each GroundTile
→ TextDebug: Set text to
"Ground behaviors: " & GroundTile.BehaviorCount
// If BehaviorCount is 0, Solid is missing.
// The Platform behavior REQUIRES Solid or Jump-thru
// on obstacle objects. This is not optional.
Step 2: Fix collision polygon gaps. Open each ground tile in the Animations editor, click the collision polygon tool, and ensure the polygon extends to the very edge of the sprite on all sides where adjacent tiles will be placed.
// For Tiled Backgrounds, set the collision polygon
// to a full rectangle covering the entire tile:
// Collision polygon points (for a 32x32 tile):
// Top-left: (0, 0)
// Top-right: (32, 0)
// Bottom-right: (32, 32)
// Bottom-left: (0, 32)
// Do NOT use rounded or inset polygons on ground tiles.
// Even 1 pixel of gap between tiles causes fall-through.
For Tilemaps, edit the collision polygon for each tile type in the Tilemap bar. Each tile that should be solid needs a polygon that fills its full cell.
Step 3: Choose the correct behavior for your platform type.
// Use SOLID for:
// - Ground floors
// - Walls
// - Ceilings
// - Any surface that blocks from all directions
// Use JUMP-THRU for:
// - One-way platforms (player jumps up through them)
// - Platforms the player can drop through
// - Cloud platforms in Mario-style games
// To drop through a Jump-thru platform:
Keyboard: On Down arrow pressed
Player: Is on floor
→ JumpThruPlatform: Set Enabled to Disabled
→ System: Wait 0.2 seconds
→ JumpThruPlatform: Set Enabled to Enabled
Step 4: Adjust Max Floor Slope for angled surfaces.
// If your game has steep slopes, increase the max floor slope.
// Default is 50 degrees. Set it in the Platform behavior properties.
// For a game with 45-degree slopes: set to 50 (default is fine)
// For steeper slopes up to 60 degrees: set to 65
// For nearly vertical climbable walls: set to 80+
// You can also set this at runtime:
System > On start of layout
→ Player: Set Max Floor Slope to 65
Step 5: Fix moving platform behavior. Moving platforms must update their position in a way the Platform behavior can track. Use Set Position or move actions rather than physics-based movement.
// CORRECT: Move the platform with Set Position
System > Every tick
→ MovingPlatform: Set X to
MovingPlatform.X + sin(time * 60) * 2
// ALSO CORRECT: Use the Sine behavior
// Add Sine behavior to the platform object
// Set Movement: Horizontal, Period: 4, Magnitude: 150
// WRONG: Using bullet or physics to move platforms
// These can cause the platform to move between physics steps,
// leaving the player floating for a frame before falling through.
Step 6: Prevent high-speed tunneling. For fast-moving players or thin platforms, make platforms thicker or limit maximum fall speed.
// Option A: Limit max fall speed
// In Platform behavior properties:
// Max Fall Speed: 1500 (default) - reduce to 800-1000
// for thin platforms
// Option B: Make platforms thicker
// Ensure platforms are at least 32px tall
// At default gravity (1500) and 60fps,
// max displacement per tick is ~25px
// A 32px platform provides enough margin
// Option C: Use scripting for continuous collision
const player = runtime.objects.Player.getFirstInstance();
const maxStep = 8; // max pixels per sub-step
const dy = player.behaviors.Platform.fallSpeed / 60;
if (Math.abs(dy) > maxStep) {
// Moving too fast - engine handles this internally
// but reducing max fall speed is simpler
player.behaviors.Platform.maxFallSpeed = 1000;
}
Why This Works
The Platform behavior in Construct 3 operates on a simple contract: it moves the character and checks for collisions only against objects that have the Solid or Jump-thru behavior. This is a deliberate design choice — not every object in a game should block movement, so the behavior uses the presence of Solid/Jump-thru as an explicit opt-in signal.
Solid behavior tells the engine “this object blocks movement from all directions.” Without it, the Platform behavior has no way to know that an object is meant to be an obstacle, regardless of its visual appearance or collision polygon.
Collision polygon coverage matters because the Platform behavior performs overlap tests against the polygon, not the sprite image. Gaps between polygons on adjacent tiles create physical gaps that the player can slip through, even if the visual tiles appear seamless.
Moving platforms work correctly when they move via direct position updates because the Platform behavior re-evaluates floor contact on each tick. If the platform and player positions are updated in the same tick, contact is maintained. Physics-based movement can introduce frame delays where the platform has moved but the player’s floor check has not yet caught up.
"The number one platform bug in Construct 3 is forgetting Solid on the ground. It sounds too simple to be the problem, but check it first. I have seen developers spend hours debugging collision polygons when the ground object simply did not have Solid added."
Related Issues
If your platform objects are dynamically spawned in a loop and some are missing, see Fix: Construct 3 For Each Loop Skipping Instances. For problems saving and restoring platform positions, check Fix: Construct 3 Save/Load System Not Restoring State. If your AJAX calls to load level data are failing, see Fix: Construct 3 AJAX Request CORS Error. And if particle effects on platform collisions are not appearing on mobile devices, see Fix: Construct 3 Particles Not Showing on Mobile.
Solid behavior on the ground. Check it before anything else.