0 votes

Hi, ive been trying to do the first project from DOCS, I got the project to a playeable state, game launches and run perfect but cant interacts with the mobs.

this is the error i get from the debugger :

E 0:00:09:0772 Error calling method from signal 'bodyentered': 'Area2D(Player.gd)::onPlayerbodyentered': Method not found.
core/object.cpp:1238 @ emit
signal()

and this is my code:
extends Area2D

signal hit


export var speed = 400
var screen_size

func _ready():

screen_size = get_viewport_rect().size
hide()


func _process(delta):

var velocity = Vector2() #Moving the Player
if Input.is_action_pressed("ui_up"):
    velocity.y -= 1
if Input.is_action_pressed("ui_down"):
    velocity.y += 1
if Input.is_action_pressed("ui_left"):
    velocity.x -= 1
if Input.is_action_pressed("ui_right"):
    velocity.x += 1
if velocity.length() > 0:
    velocity = velocity.normalized() * speed
    $AnimatedSprite.play()
else:
    $AnimatedSprite.stop()

position += velocity * delta #limit the player movement to the screen
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
    $AnimatedSprite.flip_h = velocity.x < 0
elif velocity.y != 0:
    $AnimatedSprite.animation = "Up"
    $AnimatedSprite.flip_v = velocity.y > 0



func on_player_body_entered(Rigidbody2D):
hide()
emit_signal("hit")
$CollisionShape2D.set_deferred("Disabled", true)

func start(pos):
position = pos
show()
$CollisionShape2D.disabled = false

I tryed to disconnect all signals and reconecting them again. but didnt find the mistake.

if you need any other code from other scenes, can pass them too.

THANK YOU!

in Engine by (66 points)

Remember: everything here is case-sensitive.

1 Answer

0 votes

The error message says it couldn't find _on_Player_body_entered(). Which makes sense, because in the script, you have the function named on_player_body_entered().

Note that if your node is named Player, connecting the signal will automatically create the function with the name _on_Player_body_entered(). You don't have to type it out.

In addition, the parameter passed by the signal is the body that was collided. By default, the variable name used is body. It's not clear why you changed that name too.

by (21,967 points)
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.