我有一个主要场景和次要场景。我想创建辅助场景的多个实例。次要场景将发出带有特定于其的信息的信号。主场景会检测信号并根据信息采取行动。
主场景是空的。第二个场景由图标和二维碰撞组成,以允许检测鼠标点击:
中学.gd:
class_name Secondary extends Area2D
@onready var sprite_2d = $Sprite2D
signal secondary_clicked(value)
var information
func _input(event):
if event.is_action_pressed("mouse_left_click"):
secondary_clicked.emit(information)
Main.gd:
class_name Main extends Node2D
# Called when the node enters the scene tree for the first time.
func _ready():
var secondary_scene = preload("res://Secondary.tscn")
var secondary_instance = secondary_scene.instantiate()
add_child(secondary_instance)
secondary_instance.information = "1st"
secondary_instance.position = Vector2(510, 320)
secondary_instance.secondary_clicked.connect(handle_signal)
secondary_instance = secondary_scene.instantiate()
add_child(secondary_instance)
secondary_instance.information = "2nd"
secondary_instance.position = Vector2(710, 320)
secondary_instance.secondary_clicked.connect(handle_signal)
func handle_signal(value):
print("The value from the scene: " + value)
我预计鼠标单击将导致“场景中的值:第一个”或“场景中的值:第二个”,具体取决于我单击的实例。
_input
活动不限于当前Node
。
因此两个实例都会收到对其
_input
的调用。
在任何时候都不会考虑点击是否在它们之上。
是的,您可以确定点击是否在它们上方,但是对于此用例,我建议您使用
_input_event
代替。
我更新了 secondary.gd,用自定义函数替换 _input:
class_name Secondary extends Area2D
@onready var sprite_2d = $Sprite2D
signal secondary_clicked(value)
var information
func _my_input_event(viewport, event, shape_idx):
if event.is_action_pressed("mouse_left_click"):
secondary_clicked.emit(information)
我将 input_event 连接到这个函数:
瞧,它正在按预期工作。我仍然不知道为什么我的原始代码不起作用,而这个却起作用。如果有人可以链接到有关此的信息,那就太好了。