微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以向另一棵树发出信号?

如何解决是否可以向另一棵树发出信号?

我目前正在制作一棵看起来像这样的简单树:

MainNode(父级)->字符(子级)

MainNode可以从任何文件(例如地图(即terrain.tscn)或事件(即event.tscn))中添加子节点或空闲节点。所有事件和地图都将存储在词典中,以方便使用。代码看起来像这样:

func loadNewScene(key):
   # load the corresponding tscn file from dictionary
   add_child(instanced_scene)

func freeScene(key):
   # find the corresponding target node using key
   target.queue_free()

func _ready():
   # load Mainmenu.tscn
   loadNewScene("Mainmenu")

当我在Mainmenu.tscn中按开始时,我的问题就开始了。如果我还是Mainmenu.tscn的孩子(认情况下),我总是可以发出一个信号来确认玩家按下按钮来发出信号以进入下一个场景,例如:

func _on_Button_pressed():
    var target_scene = "opening Scene"
    freeScene(current_scene)
    loadNewScene(target_scene)

但是由于该节点实际上不在MainNode中(它将在_ready()之后添加为子节点),所以我找不到从“ Mainmenu.tscn”向MainNode发出信号的方法,因为最初它不在MainNode的树中。

有没有办法向另一棵树发出信号?还是有替代解决方案?

解决方法

我相信您对08-25 22:44:17.309 11464 11464 W System.err: java.lang.ClassNotFoundException: com.samsung.android.scloud.app.ui.settings.controller.notification.SyncAndBackupSettingNotificationManager 08-25 22:44:17.316 11464 11521 I [SC][AUTH]: [RequestAuthStrategy]execute. OUT 08-25 22:44:17.316 11464 11464 W System.err: at java.lang.Class.classForName(Native Method) 08-25 22:44:17.316 11464 11464 W System.err: at java.lang.Class.forName(Class.java:454) 08-25 22:44:17.316 11464 11464 W System.err: at java.lang.Class.forName(Class.java:379) 08-25 22:44:17.316 11464 11464 W System.err: at com.samsung.android.scloud.app.core.operators.notification.NotificationRBManager.addNotificationManager(NotificationRBManager.java:80) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.core.operators.notification.NotificationManagerFactory.addNotificationManager(NotificationManagerFactory.java:48) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.core.operators.notification.NotificationOperator.onStarted(NotificationOperator.java:78) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.framework.Operators.notifyOperatorsStarted(Operators.java:374) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.framework.Operators.initialize(Operators.java:333) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.framework.Operators.<init>(Operators.java:132) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.framework.Operators.<clinit>(Operators.java:55) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.core.manager.OperatorManagerInvocationHandler$OperatorManagerImpl.<init>(OperatorManagerInvocationHandler.java:63) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.core.manager.OperatorManagerInvocationHandler.invoke(OperatorManagerInvocationHandler.java:51) 08-25 22:44:17.317 11464 11464 W System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:1006) 08-25 22:44:17.317 11464 11464 W System.err: at $Proxy0.offerOperation(Unknown Source) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.OperatorInitializer.initialize(OperatorInitializer.java:15) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.SamsungCloudApp.lambda$onCreate$0$SamsungCloudApp(SamsungCloudApp.java:59) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.-$$Lambda$SamsungCloudApp$16k4Kd-qNmt5F5o0hoM4zP1iKO8.accept(Unknown Source:4) 08-25 22:44:17.317 11464 11464 W System.err: at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) 08-25 22:44:17.317 11464 11464 W System.err: at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:604) 08-25 22:44:17.317 11464 11464 W System.err: at com.samsung.android.scloud.app.SamsungCloudApp.onCreate(SamsungCloudApp.java:59) 08-25 22:44:17.317 11464 11464 W System.err: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1190) 08-25 22:44:17.317 11464 11464 W System.err: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6859) 08-25 22:44:17.317 11464 11464 W System.err: at android.app.ActivityThread.access$1300(ActivityThread.java:268) 08-25 22:44:17.317 11464 11464 W System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1982) 08-25 22:44:17.318 11464 11464 W System.err: at android.os.Handler.dispatchMessage(Handler.java:107) 08-25 22:44:17.318 11464 11464 W System.err: at android.os.Looper.loop(Looper.java:237) 08-25 22:44:17.318 11464 11464 W System.err: at android.app.ActivityThread.main(ActivityThread.java:7814) 08-25 22:44:17.318 11464 11464 W System.err: at java.lang.reflect.Method.invoke(Native Method) 08-25 22:44:17.318 11464 11464 W System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 08-25 22:44:17.318 11464 11464 W System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) 08-25 22:44:17.318 11464 11464 W System.err: Caused by: java.lang.ClassNotFoundException: com.samsung.android.scloud.app.ui.settings.controller.notification.SyncAndBackupSettingNotificationManager 08-25 22:44:17.318 11464 11464 W System.err: ... 30 more 08-25 22:44:17.320 1276 10975 I ApplicationPolicy: isApplicationExternalStorageWhitelisted:com.osp.app.signin user:0 08-25 22:44:17.320 1276 10975 D ApplicationPolicy: isApplicationExternalStorageWhitelisted: DO is not enabled on user 0. Allowed. 08-25 22:44:17.320 1276 10975 D ActivityManager: package com.osp.app.signin,user - 0 is SDcard whitelisted 08-25 22:44:17.320 1276 10975 I ApplicationPolicy: isApplicationExternalStorageBlacklisted:com.osp.app.signin user:0 08-25 22:44:17.320 1276 10975 D ApplicationPolicy: isApplicationExternalStorageBlacklisted: DO is not enabled on user 0. Allowed. 08-25 22:44:17.320 1276 10975 I ApplicationPolicy: isApplicationExternalStorageBlacklisted:com.osp.app.signin user:0 08-25 22:44:17.320 1276 10975 D ApplicationPolicy: isApplicationExternalStorageBlacklisted: DO is not enabled on user 0. Allowed. 08-25 22:44:17.321 1276 10975 W ActivityManager: wait for provider publish: waiters=1 callerApp=ProcessRecord{77beea7 11464:com.samsung.android.scloud/5009} cpr=ContentProviderRecord{ea5af54 u0 com.osp.app.signin/com.samsung.android.samsungaccount.authentication.data.OpenContentProvider} 08-25 22:44:17.338 1276 11523 D WifiConnectivityMonitor.DnsPingerHandler: set 在Godot中的内容感到有些困惑。

默认情况下,您有一个SceneTree,用于保存游戏循环。场景可以进入或离开该树(通过分别调用树内某个节点上的treeadd_child)。

现在,我认为解决您的问题的最佳方法是赋予所有模块(如果我正确理解您的设计,则不是remove_child的任何节点)有责任从{{1 }}。换句话说,您的模块可能依赖于MainNode,而不是相反。

这意味着MainNode可能具有如下代码:

MainNode
,

如果我正确理解了您的问题,则尝试在运行时动态连接到子信号。您可以在代码中做到这一点:

Connecting to signals in code

第二,我相信您会尝试使用它来更改级别。我相信可以在这里找到更多的Godotic方法:

How to load and change scenes

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。