godot学习笔记

owofile Lv5

godot学习笔记

godot是一个开源的游戏引擎,支持2D 和 3D 的游戏制作 内涵丰富的插件库

节点

节点是godot组成的重要部分,一切的基础,不同的节点实现不同的功能

Timer

计时器

更改节点的属性

通过在节点上创建脚本,可以通过引用脚本的属性做出改变

1
2
3
#更改节点的属性
$Label.text = "hello world"
$Label.modulate = Color.AQUAMARINE

这里我在Main里创建了子节点Label,然后在Main节点创建脚本main.gd,通过拖动节点到脚本里,然后更改节点的属性。

将他将在ready函数里,可以在游戏启动加载的一瞬间,执行脚本一次,然后会把属性设置成我们更改好的样子

1
2
3
4
func \_ready():
#更改节点的属性
$Label.text = "hello world"
$Label.modulate = Color.AQUAMARINE

场景

一个游戏包含多个场景,在场景间不同切换,最终实现无限的可能性

我们可以把场景看成一个合集,比如今天我想要创建一个人物,那么我新建一个场景,然后增加人物节点,动画节点,物理碰撞检测节点,然后写一个人物移动的脚本。

将这个场景保存后,我们在新建一个场景,实现背景的渲染和显示,之后将人物场景拖入其中,会发现人物可以在场景中走动了!

脚本编写

使用GDscript用来编写重要的游戏逻辑,让资源,精灵,动画在合适的地方播放或者移动。

通过按住ctrl点击函数,可以直接链接到相关介绍文档

要注意的是,在GDscript中,是通过缩进的方式来区分

函数

这些函数会在不同的状态下,和操作下去自动调用

func _ready():

ready函数将在资源被加载的时候执行一次

1
2
func \_ready():
pass

func _input(event):

当按键被按下时,会调用这个方法,event会保存当前的按键,可以根据按键不同做出判断,比如

1
2
3
4
5
6
7
8
9
#当有按钮被按下时调用
func \_input(event):
# is\_action\_pressed 检测按键被按下
if event.is\_action\_pressed("move\_up"):
$Label.modulate = Color.RED
# is\_action\_released 检测按钮被释放
if event.is\_action\_released("move\_up"):
$Label.modulate = Color.GREEN
pass

随机函数

这里我通过做一个简单的抽奖来测试随机函数,要注意的是如果需要拼接字符串可以使用str(),否则会报错

1
2
3
4
5
6
7
8
9
func slot\_machine():
var roll = randf()
if roll <= 0.8:
$roll.text = "谢谢惠顾"
else:
#范围内数字的随机
var money = randi\_range(140,210)
print(money)
$roll.text = "大奖!获得"+str(money)+"金币" ;

储存

数组

使用数组存储数据,在GDscript中,数组的类型没有限制,可以同时存储多个类型的数值

1
var items = ["Potion",3,6]

亦或者静态定义类型

1
var items: Array[String] = ["Potion","Feather"]

使用数组通过索引 index 进行调用

1
print(items[1])

对象

通过创建对象可以存储数据,并且调用很方便,对象存在键和值

1
2
3
4
var players = {
"Lain":1,
"Boss":100
}

调用

1
print(players["Lain"])

更改

1
players["Lain"] = 50

增加

1
players["AAA"] = 200

枚举

1
enum Alignment {ALLY , NEUTRAL , ENEMY}

遍历

通过for循环遍历数组

1
2
for item in items:
print(item)

特定次数循环

循环8次

1
2
for n in 8:
print(n)

修改节点

每次我们修改节点,都是将节点直接拖入脚本,会出现路径,但我们可以通过把节点拖入顶部,然后按ctrl再松开,这样我们会获得一个保存好节点路径的变量。

移动代码学习

我的写法

有Bug

1
2
3
4
5
6
7
8
func \_process(delta):
if plyyer.position.x < -1290.413:
camera\_2d.position.x = -1290.413
#if plyyer.position.x > 965.5228:
#camera\_2d.position.x = 965.5228
else:
camera\_2d.position = plyyer.position
print(plyyer.position),

AI优化写法

解决了Bug

1
2
3
4
5
6
7
8
func \_process(delta):
var camera\_position = camera\_2d.position
var target\_position = plyyer.position
var min\_x = -1290
var max\_x = 965
target\_position.x = clamp(target\_position.x, min\_x, max\_x)
camera\_position = target\_position
camera\_2d.position = camera\_position
  • Title: godot学习笔记
  • Author: owofile
  • Created at : 2024-06-17 11:01:26
  • Updated at : 2025-04-11 21:18:27
  • Link: https://owofile.github.io/blog/2024/06/17/godot学习笔记/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments