Get Your Personalized Game Dev Plan Tailored tips, tools, and next steps - just for you.

This page may contain affiliate links.

Fixing the ‘Wall Glitch’ in Godot: Simple Collision Guide

Posted by Gemma Ellison
./
July 31, 2025

Taming the Jitters: A Simple Godot Collision Guide

Imagine this: You’re building your dream platformer. You’ve got a cool character, nice level design, and the core mechanics are shaping up. Then bam! Your character gets stuck on a wall, jitters uncontrollably, or phases through the floor. Sound familiar? The dreaded “wall glitch” has struck again.

This isn’t just frustrating, it’s a momentum killer. You spend hours tweaking code, messing with collision shapes, and scouring forums, only to feel like you’re making it worse. The good news is, with a systematic approach and a little understanding, you can conquer this beast.

The Anatomy of a Glitch: Understanding the Problem

The wall glitch usually stems from a few key issues with your collision setup:

  • Incorrect Collision Shapes: Your character’s collision shape might be too complex, leading to snagging on corners or edges.
  • Missing Collision Layers/Masks: Objects aren’t interacting correctly because they’re not “seeing” each other.
  • Imprecise Movement Code: Your movement logic isn’t handling collisions smoothly.

Let’s break down how to fix these, step by step.

Step 1: Collision Shapes: Keep it Simple

Resist the urge to create super-detailed collision shapes. Start with simple primitives like RectangleShape2D or CircleShape2D. For a character, a rectangle or a capsule shape often works best.

  • Action: Delete your current collision shape. Add a new CollisionShape2D as a child of your character. Create a RectangleShape2D resource in the “Shape” property. Adjust the size to closely fit your character sprite, leaving a tiny bit of buffer.

The goal here is to create a broad representation of your character’s physical presence, not a pixel-perfect match.

Step 2: Layers and Masks: Defining Interactions

Godot uses layers and masks to determine which objects collide with each other. Think of layers as “groups” an object belongs to, and masks as the “groups” an object can collide with.

  • Action: Select your character’s CollisionShape2D (or the parent KinematicBody2D). In the Inspector, find the “Collision” section. Set the “Layer” to something like “Character.” Set the “Mask” to include the layer that your level’s collision objects are on (e.g., “Walls”).
  • Action: Select your level’s collision objects (usually static bodies). Set their “Layer” to “Walls” (or whatever you named it). Set their “Mask” to include “Character.”

The mistake here is often to skip defining these layers and masks. This is critical for controlling which objects interact.

Step 3: Movement Code: Handling Collisions Gracefully

Godot provides several methods for moving and colliding. For platformers, move_and_slide() is your best friend. It handles collision detection and response automatically.

Example:

extends KinematicBody2D

var speed = 200
var velocity = Vector2()

func _physics_process(delta):
    velocity.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
    velocity.x *= speed
    velocity = move_and_slide(velocity)

Important considerations:

  • move_and_slide() Returns the Actual Velocity: It returns the velocity after collisions have been resolved. Use this return value if you need accurate collision information.
  • Floor Detection (for Jumping): is_on_floor() will reliably return true when the character is standing on something after move_and_slide().

A common pitfall is to directly set the position of the character without using move_and_slide(). This bypasses Godot’s collision system and leads to unpredictable behavior.

Step 4: Iteration and Refinement: The Art of Tweak

Don’t expect to get it perfect on the first try. Collision is often an iterative process. Here’s what to do:

  • Small Adjustments: Tweak the size of your collision shape, the speed variable, and any friction or bounce settings in your KinematicBody2D.
  • Test Thoroughly: Walk your character around the level, paying close attention to corners, slopes, and tight spaces.

The key is to make small, incremental changes and test after each one. This helps you isolate the cause of any remaining glitches.

The Journal: Your Secret Weapon Against the Unknown

Fixing the wall glitch can feel like a long journey. And that is where a dedicated Game Dev Journal can come in to save the day. As you iterate and learn, it’s easy to forget what you’ve tried, what worked, and what made things worse. Tracking your progress with a game dev journal is invaluable.

Here’s how it can help:

  • Documenting Solutions: Record each change you make (collision shape size, speed, layer/mask settings), and the results. This helps you retrace your steps if something goes wrong.
  • Identifying Patterns: Notice recurring issues or unexpected behavior. This can lead to deeper insights into your game’s mechanics.
  • Remembering Lessons Learned: Don’t waste time re-solving the same problem. A journal helps you remember past solutions.
  • Consistency: Consistently adding entries to your journal will over time create a source of truth about the exact state of your project.

For example, a journal entry might look like this:

“Attempted to fix wall glitch by reducing collision shape size by 5px on each side. Result: Slightly better, but still getting stuck in corners. Increased speed to compensate. Result: More fluid movement, but glitch is now more pronounced. Reverted speed change. Will try adjusting collision layers next.”

This level of detail is crucial for staying organized and avoiding frustration.

Developing a habit of keeping a game development log, or a game development journal is critical to maintain consistent forward progress. Your journal can be a place to record your ideas, document new solutions, and even stay consistent with your devlogs. All of this translates to increased visibility for your game, higher chances for your game being successful and also creating the documentation needed to remember the complex components of your game project.

Ready to start tracking your bug fixes and game development progress more effectively? Start tracking bug fixes today A journal will help you stay organized, learn from your mistakes, and ultimately build a better game.

Beyond the Basics: Advanced Techniques

Once you’ve mastered the fundamentals, you can explore more advanced collision techniques:

  • Raycasting: Use raycasts to detect walls before your character collides, allowing for smoother movement around corners.
  • Area2D: Use Area2D nodes to trigger events when the character enters a specific zone (e.g., a trigger for a cutscene).
  • Custom Collision Shapes: Create your own collision shapes using polygons or other complex geometry.

However, start with the basics and only move on to these advanced techniques when necessary. Simplicity is key.