可覆写的函数与创建节点

以下所描述的这些可覆写的函数,能够应用于节点:

GDScript

func _enter_tree():
    # When the node enters the _Scene Tree_, it becomes active
    # and  this function is called. Children nodes have not entered
    # the active scene yet. In general, it‘s better to use _ready()
    # for most cases.
    pass

func _ready():
    # This function is called after _enter_tree, but it ensures
    # that all children nodes have also entered the _Scene Tree_,
    # and became active.
    pass

func _exit_tree():
    # When the node exits the _Scene Tree_, this function is called.
    # Children nodes have all exited the _Scene Tree_ at this point
    # and all became inactive.
    pass

func _process(delta):
    # This function is called every frame.
    pass

func _physics_process(delta):
    # This is called every physics frame.
    pass

如前所诉,用这些函数替代通知系统是更好的选择。

创建节点

如果要用代码方式创建一个节点, 只需调用 .new() 方法即可,这也适用于其他的基于类的数据类型。举例说明:

GDScript

var s
func _ready():
    s = Sprite.new() # Create a new sprite!
    add_child(s) # Add it as a child of this node.

若要删除一个节点,无论其是否在场景树之内, free() 方法一定会被调用:

GDScript

func _someaction():
    s.free() # Immediately removes the node from the scene and frees it.

当一个节点被释放时, 它也会释放其所有子节点。因此, 手动删除节点比看起来简单得多。释放基节点, 那么子树中的其他所有东西都会随之消失。

当我们要删除一个当前处于“阻塞”状态的节点时,就可能发生这种情况, 因为此时它正在发出信号或者在调用一个函数。这会导致游戏崩溃。使用调试器运行Godot通常能捕获这种情况并向你发出警告。

删除一个节点最安全的方法是使用 Node.queue_free()。这会在程序空闲时安全地擦除该节点。

GDScript

func _someaction():
    s.queue_free() # Removes the node from the scene and frees it when it becomes safe to do so.

原文地址:https://www.cnblogs.com/empist/p/10200160.html

时间: 2024-08-30 12:47:39

可覆写的函数与创建节点的相关文章

如何在Drupal7中用代码批量创建节点、评论和分类

最近,我忙于一个网站迁移工作.网站是使用某个老式CMS建立的,有一定数量的文章.不同的分类数据和用户评论.我的团队被雇来把这些数据从这个浪费人力物力的老式CMS上完整的迁移到功能更现代的开源Drupal7上.我喜欢干这一类事儿,帮别人拜托封闭专利技术永远是一种快乐.为完成这个任务,我需要通过代码在Drupal7中批量创建节点.评论和分类.这在Drupal 6的版本上只是小菜一碟,但Drupal7核心中引入了entities和fields的概念,所以现在开发起来需要有一点变化. 现在,我贴出这篇文

jQuery节点创建与属性的处理 创建节点

创建元素节点: 可以有几种方式,后面会慢慢接触.常见的就是直接把这个节点的结构给通过HTML标记字符串描述出来,通过$()函数处理,$("html结构") $("<div></div>") 创建为本节点: 与创建元素节点类似,可以直接把文本内容一并描述 $("<div>我是文本节点</div>") 创建为属性节点: 与创建元素节点同样的方式 $("<div id='test' cla

JS DOM创建节点

DOM节点操作之增删改查 document.write() 可以向文档中添加节点 但是有个致命问题,会把文档原有的节点全部清空 因此不推荐使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ width:100%; height:1

js创建节点及其属性

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>创建节点及其属性</title></head><style> #listShow>li ul{ display: none; } #listShow>li>a{ background:#ccc; } li{ list-s

MySQL函数不能创建的解决方法

MySQL函数不能创建,是一个很麻烦的问题,下面就为您提供了一个解决此问题的方法,如果您也遇到过类似的问题,不妨一看. http://database.51cto.com/art/201010/229918.htm 在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况.下面就教您一个解决MySQL函数不能创建问题的方法,供您借鉴参考. 出错信息大致类似: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO S

覆写、重写、多态

1.父类对象用子类对象来实例化的,那么,这个新对象只继承父类的成员,子类的成员根本没有实例化. ** 编译时已经决定左边对象的类型,右边的类型只要包含右边类就可以. 2.虚方法:virtual 他只能修饰方法的,这个虚方法是包含实现的,虚方法和抽象方法一样也可以用override来覆写. 这种功能是为将来留出了修改这个方法的可能. 3.覆写:override 当用override覆写之后原方法是已经覆盖掉了,所以不能再被执行,这时父类对象用子类对象来实例化时,对象获得不了已经被覆盖掉的原方法,只

写一个函数排序整个字符串数组

创建一个字符串数组,总共5个元素,每个元素最多保存30个字符, 写一个函数排序整个数组 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int i,j; char tmp[30]; char arr[5][30]={"bbbb","aaaa","dddd","wwww","eeee"

虚方法和覆写方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace nange_1 { class A { public void f() { Console.WriteLine("在基类中"); } } class B : A { public void f() { Console.WriteLine("在子类中"); } } class P

Java基础学习笔记【02】方法覆写、快捷键、super、this、单例模式、适配器

访问类型默认default就是默认没写访问权限,就是包下的访问权限(类内部.同一个包) 除了private访问权限本类,其他的访问权限都包括包 继承:[A继承B] 1 类名A extends 类名B 类的方法[覆写]: 方法要素 描述 方法名 子类父类的覆写方法名一致 返回值 小于父类的返回 参数 小于父类的参数类型 访问类型 大于父类的访问类型 覆写: 1 public void Fun(object obj){  } 1 2 @override public void Fun(string