Topic was automatically imported from the old Question2Answer platform.
Asked By
idk tbh
Using Area2D nodes, I want an event that is called only when it collides with something to the right or left of it, and not to the top or bottom. I’m making a basic enemy ai which i want it so that when it collides with the right or left changes direction
Here’s the code:
extends Area2D
signal damage_player
var motion = Vector2()
var is_going_backwards = false
func _on_Area2D_body_entered(body):
var bodies = get_overlapping_bodies()
for body in bodies:
if body.name == "Player":
emit_signal("damage_player")
if is_going_backwards == true:
is_going_backwards = false
else:
is_going_backwards = true
Check which side the colliding body is on in body_entered.
if body.global_position.x < global_position.x:
#body collided on the left side.
global_position is a property, not a method, so remove the ().
kidscancode | 2019-04-04 20:01
wouldn’t that still detect collision below or above the body?
idk tbh | 2019-04-05 09:44
It would yes, if the area has a width then you can see if body X global position is within the width of the area’s X scale by taking the X global position of the area and + or - half of the width. This collision would have collided from the top or bottom.
Magso | 2019-04-05 11:17
Sorry for the stupid question, I’m new to godot, but how would I go about adding a height and width to the area2d?
idk tbh | 2019-04-05 12:35
Make a CollisionShape2D child, select a shape in the inspector and click and drag to size. All collision shapes will work like this as long as the parent is an area or a body of some kind. Also don’t mix up 2D with 3D.
Magso | 2019-04-05 15:55
ah, i did that already with a collision polygon2d. Thanks for clarifying that that was how its done