Godot Version
4.2.2
Question
Hi team
I’m doing something wrong with Collision - I’m trying to understand the most basic thing, and can’t seem to make it work
- Have attached a CollisionShape2D to a CharacterBody2D with a nice square shape (a
Player
) - Have created a StaticBody2D, also with a nice square CollisionShape2D (a
Wall
) - Placed an instance of both in an otherwise empty
Level
node, at two different locations - Attached a simple “move a grid_sized jump with each keystroke, unless it would cause a collision, then do nothing instead” script to the
Player
Expected behaviour - Player
could move around freely, but couldn’t cross a Wall
from any direction
Observed behaviour - Player
is stopped by Wall
on one side only. Can freely enter Wall
collision shape from other three cardinal directions, and then gets stuck inside and cannot move in any direction
var direction = [Vector2(0, 1), Vector2(0, -1), Vector2(-1, 0), Vector2(1, 0)]
const GRIDSIZE = 128
func _physics_process(delta):
if Input.is_action_just_pressed("Move Down"):
move(direction[0])
#duplicated for each cardinal direction
func move(change):
var amount = change * GRIDSIZE
var collision = move_and_collide(position + amount, true)
if collision:
print("ow")
else:
position += amount
print(position)
CollisionShapes are un-scaled, ie (1, 1)
Have checked that 'One way = false`
I’m obviously doing something wrong, and don’t understand this fundamental building block, any guidance greatly appreciated.
Let me know what other info I can provide to help, and big thanks in advance