4.X版 GDScript范例
支持注解
从4.x开始,GDScript将支持类似JAVA一样的注解机制,同时3.X时期存在的一些关键字将改用注解的方式。比如比较常用的export
关键字,它会由一系列的注解来代替,比如用上面范例中的@export_range
实现限定变量范围。并且,从4.x彻底不需要用类似export(int)
的形式声明类型了,系统会从冒号后面的类型直符接识别其类型,比如@export var my_number: int
另外,以后为一个类声明类名后,想给它加个图标的话,可以直接用@icon
。@
的引入使注解类代码和逻辑代码更清晰的区分开,同时GDScript也更加规范了。
属性(Properties)的定义格式
属性机制本质上是个语法糖,但实话说老版本GDScript中属性的定义比较麻烦且不美观,所以老王几乎很少定义属性。4.x后的属性直接借鉴了C#格式。这样就方便且美观多了。
var _hp:int
var hp:
get:
return _hp
set(value):
_hp = value
await关键字代替yield
老王之前写过几篇文章介绍GDScript的协程:
《GDScript:协程(Coroutine)(一)概念和使用范例》
《GDScript:协程(Coroutine)(二)简单粗暴实用至上的语法设计》
《Godot Engine:实用技巧之yield(owner, “ready”)》
新的await
代替yield
以后,语法也更加清晰了,比如:
await $Button.button_down
加入super关键字
以前要调用基类成员使用的是.
,在4.x版本中加入了super
关键字,并且提供了两种用法:
- 在重写方法中调用基类同名方法
func _ready():
super()
dosometing...
- 调用基类非同名方法
super.function_name()
去除了多级调用问题
这个问题老王在《GDScript:关于派生类调用基类方法的一个注意事项》中也写过,确实是个容易产生歧义或误用的地方。在4.x中除非显式使用super
关键字,否则基类的同名方法将不会被调用(尤其对于类似_process
以及_ready
这样的默认方法)
小结
目前新的GDScript已经合并入了4.x的主分支中,但是依然处于开发阶段。总的来说它的易用性和灵活性以及规范性都有了进一步的提升。