方法命名方式
使用蛇形命名法:单词之间通过下划线 _
连接,比如 out_of_range
- 下划线风格命名,全部小写+下划线。
-
以开头不加
_
下划线开头的变量和方法作为外部可调用控制的标识。 -
以单个下划线作为内部的方法和可以被重写覆盖的方法。
Godot 方法命名风格
开头加一个下滑线的方法在 Godot 中随处可见 _ready
,_enter_tree
,_input
,而且他们都是可以被重写的方法。例如:
Object 类中的
Node 类中的
开头带下划线的都是可以直接重写的方法,而且他们都没有任何功能,就是专门用于让你重写的。
例如 Object
类中的 _notification
和 notification
方法一样,前者加了下划线的标志着是没有功能的方法,这种方法都是对象自身内部有他自己的运行机制的,在不同条件下会自动调用这个方法,就是让你根据自身需要来选择是否重写的方法;而后者开头没有加下划线,则是自身就是有功能的,让你根据需要去调用它的。
当然有些不加下划线的方法也可以,但是那样会覆盖掉他的功能,虽然也可以加上 .方法名([参数])
的方式进行扩展方法,但如非方便或必要则不建议做。
示例:
那我们如果想做一个基础的类的脚本,想让他扩展更多的子类,那么就需要做一些类似的可扩展的方法,则这些可扩展重写的方法就像上面一样都加上下划线,而方法代码块中没有其他语句。
如果我要写一个状态机的基础状态类,那么他会至少有 进入状态 和 退出状态 的方法需要用户根据需要去重写方法逻辑。那么我会至少有如下方法:
class_name BaseState
extends Node
signal entered
signal exited
## 进入状态
func enter_state():
_enter_state()
emit_signal("entered")
## 退出状态
func exit_state():
_exit_state()
emit_signal("exited")
func _enter_state():
# 用于重写重写这个方法,在进入这个状态时生效
pass
func _exit_state():
# 重写这个方法,在退出这个状态时生效
pass
func _state_process(delta):
# 重写这个方法,当前状态的线程
pass
#(省略其他代码)
那么在状态机根节点中的切换状态的逻辑中会是以下的调用逻辑
class_name StateMachineRoot
extends Node
# 当前运行的状态
var _run_state: BaseState
func _physics_process(delta):
if _run_state:
# 也并非绝对,如果你比较了解他的运行逻辑也可以直接这样调用,就像这个
_run_state._state_process(delta)
## 切换状态
func trans_to_state(state):
# 退出上个状态
if _run_state != null:
_run_state.exit_state() # 外部调用退出状态方法
# 进入执行这个状态
var state = get_child(state)
state.enter_state() # 外部调用进入状态方法
_run_state = state
#(省略其他代码)
这样在用户自己扩展各种状态类的时候,仅仅进行重写 _enter_state
、_exit_state
、_state_process
方法即可,而不能重写其他方法,否则可能会导致逻辑混乱错误。
变量名命名
- 开头不加下划线,作为可以外部调用使用的变量
-
开头加下划线,只作为内部的变量或者扩展的脚本使用,而不作为
对象._变量
这种方式使用。
当然外部调用这个方法变量也可以,不建议这样做,代码量多了之后,可能会导致有点混乱,你也不清楚到底外面用还是里面用的,对代码后续修改可能会有点影响,其他人看的话就加大了理解难度。
类名命名
使用大驼峰法(Upper Camel Case) 也称为 帕斯卡(Pascal)命名法
各个单词的开头字母大写连接,如:FirstName、LastName、CamelCase
规范是为了统一,如果一直只是一个人其实也妨碍不大。但是多人就需要有规范,大家都了解之后,看了代码都心照不宣知道他的使用范围,理解更快,使用也减少出错,减少沟通成本等。