3
\$\begingroup\$

I'm learning to use the Godot Engine (v3.5) along with the GDScript. I'm following the official tutorial for the same.

In the step-by-step tutorial for the "Dodge the Creeps" game, there is a section on using a signal to identify a hit.

Based on the above I have the following code:

extends Area2D

signal hit

export var speed = 400 # How fast the player will move (pixels/sec).
var screen_size # Size of the game window.

func _ready():
    screen_size = get_viewport_rect().size
    hide()

func _process(delta):
    var velocity = Vector2.ZERO
    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
        $AnimatedSprite.play()
    else:
        $AnimatedSprite.stop()
        
    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 = "walk"
        $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(body):
    hide() # Player disappears after being hit.
    hit.emit()
    $CollisionShape2D.set_deferred("disabled", true)

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

This code gives me the following error:

error(45,1): The identifier "hit" isn't declared in the current scope.

This is what the signals in the "Node" tab look like.

]1

I can't seem to call hit.emit() despite it being declared.

\$\endgroup\$

1 Answer 1

3
\$\begingroup\$

This line:

hit.emit()

Is correct in GDScript 2.0 (Godot 4). Which might have just sneaked on you as it was released hours earlier at the time of writing.

In Godot 3.x you do this:

emit_signal("hit")

You can see which version of the documentation at the bottom left. For example here I'm looking at the current stable:

v: stable

If you click there it will expand to a menu where you can pick the version you want:

Documentation version menu

As you can see, you can choose language (in this case it is in English) and version (in this case it is "stable", which, again, it is 4.0 at the time of writing). Since you are working on 3.5 you would pick that.

By the way, you can see "3.6" there, it is work in progress documentation for the next version of the 3.x branch. Similarly the option that says "latest" is the work in progress documentation for the next version of the master branch… which should be 4.1.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .