Top-down collision?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By dualityDev


I’m relatively new to Godot, and had a question about top-down collision. I’m using CollisionBody2D for walls, and I’m trying to get them to collide with the player, but it’s not working.

    extends KinematicBody2D
signal WallCollide

export var speed = 400 # movement speed
var screen_size 

func _ready():
	screen_size = get_viewport_rect().size
func _process(delta):
	var velocity = Vector2.ZERO # The player's movement vector.
	if Input.is_action_pressed("move_right"):
		velocity.x += 1
	if Input.is_action_pressed("move_left"):
		velocity.x -= 1
	if Input.is_action_pressed("move_down"):
		velocity.y += 1
	if Input.is_action_pressed("move_up"):
		velocity.y -= 1

	if velocity.length() > 0:
		velocity = velocity.normalized() * speed
	position += velocity * delta
	position.x = clamp(position.x, 0, screen_size.x)
	position.y = clamp(position.y, 0, screen_size.y)
	if velocity.x != 0:
		$AnimatedSprite.animation = "right"
		$AnimatedSprite.flip_v = false
		# See the note below about boolean assignment.
		$AnimatedSprite.flip_h = velocity.x < 0
	elif velocity.y != 0:
		$AnimatedSprite.animation = "up"
		$AnimatedSprite.flip_v = velocity.y > 0
func _on_Player_body_entered(body):
	if body.class == "wall":

func _on_Player_WallCollide():
	speed = 0
	#only this strange b/c i needed something *really* drastic to make sure it worked
:bust_in_silhouette: Reply From: David000

I think you might be better off with collision shape
Instead of collision body. If youre using a tilemap, there are loads of tutorials on youtube about collisions with tilemaps. Just search: “How to set up collisions with tilemaps”

I actually am using CollisionShape2D already, it turns out. I didn’t actually know tilemap was a thing, using it now and it works.

dualityDev | 2022-04-15 07:37

glad to hear that!

David000 | 2022-04-15 12:20