Mob node dont work in First 2D game

Godot Version

Godot 4.2.1

Question

I am new with Godot. My first 2d game don’t show the enemies ( Mob ).
Print I put in function _ready() don’t print anything. How can I check “activation” Mob node?
Where is activated Mob node?
The Player node work normal. How can I verify MobPath is Ok ?

Thanks

Hello !

I have done the entire tutorial again and the same thing happens to me again (maybe I have repeated the same mistake).

The Player node works, but the Mob node does not take action. And when I run it step by step I don’t see any instructions that I can associate with the Mob node, so it doesn’t run.

The Mob scene runs alone, an enemy is seen flying without moving forward.

In the new_game() function of Main.gd I see Player.start() and StartTimer.start(), but shouldn’t MobTimer.start() be there??

How should the Mob node be activated???

Thanks
PD. This isn’t the solution. The error remains …

Please send some screenshots of your scene tree and scripts, it helps a lot more to see how your stuff is set up.

This are the scripts and scen screenshots of my project …

Thanks

Mob.gd
extends RigidBody2D

Called when the node enters the scene tree for the first time.

func _ready():
var mob_types = $AnimatedSprite2D.sprite_frames.get_animation_names()
$AnimatedSprite2D.play(mob_types[randi() % mob_types.size()])

Called every frame. ‘delta’ is the elapsed time since the previous frame.

func _process(delta):
pass

func _on_visible_on_screen_notifier_2d_screen_exited():
queue_free()

Main.gd
extends Node
@export var mob_scene: PackedScene
var score

Called when the node enters the scene tree for the first time.

func _ready():
new_game()

Called every frame. ‘delta’ is the elapsed time since the previous frame.

func _process(delta):
pass

func game_over():
$ScoreTimer.stop()
$MobTimer.stop()

func new_game():
score = 0
$Player.start($StartPosition.position)
# Lo habia puesto YOYOYO $MobTimer.start() # PRUEBA MIA !!!
$StartTimer.start()

func _on_score_timer_timeout():
score += 1

func _on_start_timer_timeout():
$MobTimer.start()
$ScoreTimer.start()

func _on_mob_timer_timeout():
# Create a new instance of the Mob scene.
var mob = mob_scene.instantiate()

# Choose a random location on Path2D.
var mob_spawn_location = $MobPath/MobSpawnLocation
mob_spawn_location.progress_ratio = randf()

# Set the mob's direction perpendicular to the path direction.
var direction = mob_spawn_location.rotation + PI / 2

# Set the mob's position to a random location.
mob.position = mob_spawn_location.position

# Add some randomness to the direction.
direction += randf_range(-PI / 4, PI / 4)
mob.rotation = direction

# Choose the velocity for the mob.
var velocity = Vector2(randf_range(150.0, 250.0), 0.0)
mob.linear_velocity = velocity.rotated(direction)

# Spawn the mob by adding it to the Main scene.
add_child(mob)

Player.gd
extends Area2D

signal hit

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

Called when the node enters the scene tree for the first time.

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

Called every frame. ‘delta’ is the elapsed time since the previous frame.

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
	$AnimatedSprite2D.play()
else:
	$AnimatedSprite2D.stop()

position += velocity * delta
position = position.clamp(Vector2.ZERO, screen_size)

if velocity.x != 0:
	$AnimatedSprite2D.animation = "walk"
	$AnimatedSprite2D.flip_v = false
	# See the note below about boolean assignment.
	$AnimatedSprite2D.flip_h = velocity.x < 0
elif velocity.y != 0:
	$AnimatedSprite2D.animation = "up"
	$AnimatedSprite2D.flip_v = velocity.y > 0

Este if y else de abajo es lo mismo de arriba???

if velocity.x < 0:
	$AnimatedSprite2D.flip_h = true
else:
	$AnimatedSprite2D.flip_h = false

func _on_body_entered(body):
hide() # Player disappears after being hit.
hit.emit()
# Must be deferred as we can’t change physics properties on a physics callback.
$CollisionShape2D.set_deferred(“disabled”, true)

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

This says it was solved. What is the solution?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.