godot学习笔记-01 FoxyVsSlime
简介
本篇是制作FoxyVsSlime这个demo的学习笔记
FoxyVsSlime的godot工程: https://github.com/shuoGG1239/godot_play/tree/main/foxy_vs_slime
基础界面及操作
场景与节点
- 下图1和图2都是给
main节点
添加子节点
- 下图1和图2都是给
- 2D场景的对象编辑
- 如图, QWES: 选择,移动,旋转,缩放
- 文件系统(资源管理)
- 资源直接从外面拖进来就行
- 检查器
- 下图是从检查器查看和编辑
main节点
的属性
- 下图是从检查器查看和编辑
- 脚本
- 脚本是绑在节点上的, 节点实例化后会执行脚本上的各种handler如
_ready()
,_process(float)
等等 - @export可以将变量暴露到节点的检查器进行编辑, 例如绑定其他场景类或节点实例或资源等等
- 脚本可以直接使用被绑节点实例的field, 不需要加this或self之类的, 查看修改都行, 例如main节点是Node2D类型, 有
position
属性, 可以直接position=xxx
直接修改main节点的位置 - 脚本对应节点上的子节点可以直接
$节点id
获取其节点 - 看下另外一个节点enemy, 是Area2D节点所以有碰撞信号如
_area_entered
, 红是信号, 绿是信号接受函数, 类似Qt的信号与槽, 但godot这边只能一对一
- 脚本是绑在节点上的, 节点实例化后会执行脚本上的各种handler如
- 调试, 按F5运行游戏调试
- 运行期间可以在
场景/远程
时实查看运行时节点
- 运行期间可以在
FoxyVsSlime工程用到的类
主场景:
Node2D
- 相机:
Camera2D
- 文字容器:
CanvasLayer
- 文字:
Label
- 文字:
- 背景:
Node2D
(Node2D可以当组来使用)- 背景图:
Sprite2D
- 边界:
StaticBody2D
- 物理碰撞区:
CollisionShape2D
- 物理碰撞区:
- 背景图:
- 定时器:
Timer
- BGM:
AudioStreamPlayer
- 相机:
玩家foxy:
CharacterBody2D
(相比Sprite2D,Node2D多了velocity
系列属性, 方便控制移动)- foxy动画雪碧图:
AnimatedSprite2D
- foxy物理碰撞区:
CollisionShape2D
- foxy声音:
AudioStreamPlayer
- 定时器:
Timer
- foxy动画雪碧图:
敌人slime:
Area2D
(能检测其他带物理碰撞区的节点的碰撞_on_body_entered
,_on_area_entered
)- slime动画雪碧图:
AnimatedSprite2D
- slime物理碰撞区:
CollisionShape2D
- slime声音:
AudioStreamPlayer
- slime动画雪碧图:
玩家输入
Input
: 单例- velocity = Input.get_vector(“left”, “right”, “up”, “down”)
其他常用类或函数
PackedScene
: 可以认为是Scene类的容器, 用instantiate()实例化get_tree()
: 返回包含该节点的 SceneTree, 是Node
的方法get_tree().current_scene
: 主场景节点(即root的子节点main)await get_tree().create_timer(1).timeout
: 同步等待1squeue_free
: 删除本节点, 是Node
的方法