Godot 4
I’m making a Suika game. I created a custom signal that is triggered by two balls when they touch.
ball.gd
extends RigidBody2D
signal target_touch(Object_I, Object_He)
var Texture_Maxwell := load("res://sprites/maxwell.png")
var Texture_2 := load("res://icon.svg")
var rng = RandomNumberGenerator.new()
@export var lvl_ball = randi_range(1, 2)
@onready var spr := $Sprite2D
@onready var PC := $Physic_Coll
@onready var AC := $Area2D/Area_Coll
func _ready():
if lvl_ball == 1:
spr.scale = Vector2(0.159, 0.159)
spr.texture = Texture_Maxwell
PC.shape.radius = 25
AC.shape.radius = PC.shape.radius + 1
if lvl_ball == 2:
spr.texture = Texture_2
PC.shape.radius = 35
AC.shape.radius = PC.shape.radius + 1
func _on_area_2d_area_entered(area: Area2D) -> void:
var par := area.get_parent()
if lvl_ball == par.lvl_ball:
target_touch.emit($".", par)
Since the balls are dynamic, I create a preload. I connect the signal, but the code in create_ball does not work.
main.gd
extends Node2D
@onready var ball_scene := preload("res://scenes/ball.tscn")
func _ready():
var ball := ball_scene.instantiate()
ball.target_touch.connect(create_ball)
func create_ball(Object_I, Object_He):
Object_I.queue_free()
Object_He.queue_free()
var ball := ball_scene.instantiate()
$Balls.add_child(ball)
Tell me why it doesn’t work, please