返回介绍

变量

发布于 2024-01-08 20:55:54 字数 10946 浏览 0 评论 0 收藏 0

变量是代码中用来存放数据的基本单位(抛开计算机底层不谈),游戏中会变的数据都是变量。

玩家的生命值、游戏分数这种直观看到的数字是变量,玩家的位置、任务进度这种抽象的数据也是变量。

在 GDScript 中使用 var 关键字声明变量,它的基本语法格式如下:

var <变量名> [: 类型] [= <初始值>]

[!tip] 语法格式解读

本文中使用上面这种格式展示语法,其中尖括号引用的内容表示必须填写,并把尖括号内的东西换成该填入的字符,例如<变量名>就表示这里必须要写一个变量名,至于名字是什么你可以自己来定。

方括号表示可选填写,例如 var 语句中的类型初始值就可以省略。

变量声明示例

var 玩家名称 # 单纯声明一个变量,存储值为空,后续可以存储任意类型的数据。
var 玩家生命值 = 100 # 声明变量初值为 100,后续可以存储任意数据类型的数据。

var 敌人名称: String # 声明变量初值为空,并限定类型为字符串,后续只能存储该类型的数据。
var 敌人生命值: int = 100 # 声明变量初值并同时限定类型为整数,后续只能存储改类型的数据。

# 若指定了初始值,使用 `:=` 语法可以自动推导变量类型,等价于上一种变量声明格式,后续只能存储该类型的数据。
var 战斗回合数 := 300 # 等价于 var 战斗回合数: int = 300

关于变量类型我们会在下一节讲解。

变量声明的位置

方法体的内部和外部都可以声明变量,但实际作用不同(具体参见[作用域]章节):

var 生命值 = 100 # 放在了 _ready 的外面
func _ready():
    var 生命值 = 100 # 放在了 _ready 的里面

当放在方法外面,也就是文件最外层时,表示这个变量属于当前节点,也就是说这个节点现在拥有了生命值这个属性,这个变量随着节点一起出现和消失。

当放在方法里面时,这个变量就成了一个临时变量,当方法被执行,程序运行到 var 语句这一行时就会创建这个变量,当方法执行完毕时,这个变量就会自动消失。

因此可以感觉到,如果要处理一个持续的数据,应该把变量的声明放在方法的外面。

变量赋值

现在假设咱们给节点声明了生命值这个变量,现在希望它每帧扣除一滴血,这时就可以使用变量赋值语句来修改变量的值,赋值语句格式如下:

<变量名> = <新的值>

可见其实就是把 var 关键字去掉了而已,既然这样,实现扣除一滴血的代码就可以这样写:

func _process(delta):
    生命值 = 生命值 - 1

由于 _process 是每帧执行一次,所以上面代码就实现了每帧扣除一点血。

注意不要在前面加上 var,否则就成了每帧声明一个新变量。

[!tip] 什么是关键字

关键字就是指 GDScript 中具有特殊含义的一些单词,例如 var,他就表示创建变量。

[!tip] 中文变量名

Godot 从 v4.0-beta15 的开始支持 Unicode 编码(万国码标识符,包含中文编码)。但大多数人更喜欢英文变量名,本文为了阅读方便考虑(我怕我英语渣闹笑话)采用汉字变量名。

[!tip] 声明?创建?

在 生命值 这个例子中声明就等于创建,但不要和后面要学到的创建(实例化)对象搞混。

[!note] 变量名命名规则

上面提到了,变量名是自己起的,但很明显不能乱起,例如我让一个变量叫 var,这肯定很怪,所以变量名有以下规则:

  • 不能使用数字开头

  • 不能包含特殊字符,例如空格、加号等(唯一支持的符号是下划线 _)

  • 不能和关键字重复

本文为了阅读方便,将尽量使用中文命名,这样读者可以根据变量名快速区分 Godot 内置变量和我们定义的变量,不过在一般的开发中,变量名还是以英文为主。

变量名的一个特例,match 是个关键字,但是变量名可以为 match。当然,我们都不推荐这类同名,因为容易混淆。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文