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的信号与槽 
- 脚本是绑在节点上的, 节点实例化后会执行脚本上的各种handler如
- 调试, 按F5运行游戏调试
- 运行期间可以在
场景/远程时实查看运行时节点 
- 运行期间可以在
关于position
position变量是相对父节的位置, 全局位置则是global_position- 节点默认的初始
position就是(0,0), 你可以看下Tranform的position或者在onready打印下看看 - 例如
game和player是父子关系,player一开始放置在game的(111,222)位置, 此时如果player的position从(0,0)变为(100,300), 他则在game的位置就变成(211,522)了
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(能检测其他带物理碰撞区的节点的碰撞信号area_entered,body_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的方法