学习资源来自b站up主: 戈多翰
(有小部分基础 纯个人记录学习)
一. 引擎学习介绍
节点(零件)
(最基本的开发组件)拼接内容(图片 音乐 显示模型 物理体)
场景树与服务器
场景树是游戏主循环对象 在树下的节点能正常使用(节点初始化时不在树下)
服务器是内置server实现节点功能
场景(节点的组织方式 节点的集合 类似文件夹)
游戏实际运行不存在“场景” 游戏从主场景开始运行
界面介绍
1.场景栏:新建选择节点 附加脚本
2.文件系统:场景文件与素材文件
3.视图区:预览场景可视节点 编写代码 查看素材库
4.检查器:显示节点属性
了解GDScript(Godot的原生语言)
实现内在逻辑 控制节点展示功能 以下展开对GDScript学习了解
二. GDScript简单入门
1. 变量
创建空节点 创建并且修改脚本设置(模板和路径)
定义变量:var
即使是同一脚本文件 绑定不同的对象产生同一变量名 也分别属于不同对象因此使用变量前要指明变量所属对象;
如此处_1前有self. 但可省略(多对象计算时要指明不同对象)
(enter tree类似主函数)
四种基本变量
整形:int 浮点型:float 字符型:String(文本对话 字符串的加法为拼接) 布尔:bool
类型限定
没有类型限定可以相互转换 但是有类型限定时不同转换情况
此时 整数转小数 b=a得1 小数转整数 a=b得2
小数转字符串 c=String.num(b) 得2.6(作为文本而非数字)
整数转字符串 c=String.num_int64(a)
布尔(不能与字符串转换) 非0即真 (!取反)
值变量与引用变量
值变量AB A创建一个与B相同的数据 对于A的修改不改变B
引用变量AB A不会创建一个与B相同的数据 对于A的修改可以改变B
二维向量
(ctrl加左键查询)
修改x坐标或y
变量的作用(改变游戏内容)
变量除定义的过程外 必须在函数内进行数值的修改 内置代码修改会对游戏有影响自定义变量不会;因此用自定义变量定义逻辑上的游戏数据调整内置代码变量
ej.speite2D一个图片 添加脚本
实现图片向右平移
2.函数
包括自定义函数与内置函数(大部分内置函数对游戏内容产生实质性影响)
在程序中 一切数据的处理流程都要通过函数来实现(一般必须指明对象)
函数拥有独立作用域 运行结束后变量(和变量所代表的数据)会自动销毁
定义函数
规则与变量相同
pass没有功能 只是实现结构
函数调用
ej.结果为7(类似c语言)
同时参数也可以设置默认值或者定义类型
也可以定义函数数据类型
内置虚函数
指特定名称但没有实际处理流程的函数 这部分函数的内容可以自行编写
节点内的虚函数会在特定条件自动触发
条件:
1.当节点本身或其周围节点状态发生改变时(节点创建 入树 出树 死亡前 子节点全部入树)
2.当场景树状态发生改变时 且节点自身处于树下(画面刷新 物理引擎刷新 硬件设备输入)
3.其他
常用虚函数:_init(创建时) ready(全部节点加入树) _proces(画面刷新) -s(物理引擎刷新)
画面刷新时频繁调用(后面会讲到的轮询)
3.IF与WHILE
(类似c语言)
if(分支)
(需要设置到函数内部)注意if内部两个缩进(八个空格)
若使用小数时 需要使用此函数
若使用字符串时(记得bool类型和字符串不能直接转换)
此时可以打印(若字符串内为空 则不能打印)
即 if可以判断字符串是否为空
同时也可以进行等于号的判断
elif与else同c语言 (有独立作用域)
while
与if写法一致 没有elif和else
while执行完后会判断成立条件
注意:避免死循环(设置结束标志,或者break)
4.数组与for
数组
定义数组:
对数组进行类型限定:
数组内类型可多变 也可以直接定义类型
访问数组:(0是第一个元素)打印1
数组通过调用函数增删数据
添加元素:删除元素:
删除时会优先删除前面的数据
此时打印12345
可以使用size()获取元素总数
此时打印6
数组是引用变量
此时打印 1 2 3 4 5 6 因为ab指向同一数组
若定义在函数外
此时函数运行结束b销毁 但是b指向的内容a还存在
for
用法:for 变量名(之前没有出现过的) in
ej.遍历数组
此时对i修改不会影响a数组本身(值变量)
三. Input单例与自定义单例
1.单例
单例是一个可以在任何脚本中对其进行直接访问的对象
分为内置单例和自定义单例(每个单例都是独立的对象)
内置单例不是节点主要成员是各类Server 开发者可以使用他们直接控制游戏程序的图像或者音效等内容此外还包括一些对象涉及网络时间 电脑系统 输入等;
自定义单例必须是节点类型的对象 是开发者自定义的全局对象
在帮助中搜索帮助点击GlobalScope(属性中是可访问的内置单例)
2.Input单例
Input是一个重要对象 他可以对玩家的按键情况进行反馈
Input是Action手动设置
移动键位设置:
项目中的项目设置里选择键位映射 设置按键对应操作
脚本中访问Input:
其中get_action_strength是对应按键与行为的重要内置函数
轮询
轮询是在_process或_physic_process中通过Input单例来获取按键情况一秒数十次检测游戏输入情况的编码
if + 轮询 + 修改内置变量 = 游戏在玩家控制下发生实质性改变:
思路:如果我们按下a(内置设置)的话 我们希望 自己的位置 的x坐标 不断地减小 此时图片像向左移动
3.自定义单例
自定义单例步骤:
在项目设置中选择Autoload
选择脚本路径
点击添加
自定义单例特征及其用途:
可在任意一个脚本中对他们进行直接访问
用于记录全局变量