当前位置: 首页 > 编程日记 > 正文

[译]Godot系列教程一 - 场景与节点

场景(Scene)与节点(Node)

简介

img_310c21d817476c8d6a0c9af4199f6edc.png

先设想有那么一瞬间你自己不再是一名游戏开发者了,而是一名大厨!
你的装备换成了一套大厨的制服。不要考虑制作游戏的事情,你现在的职责是为你的顾客创建新的可口的食谱。

那么,大厨是怎样创建食谱的呢?食谱分为两部分:首先是食材;然后是工序。这样,任何人都可以根据食谱烹调并品尝到你华丽的创作。

Godot中制作游戏与这个过程非常相似。Godot引擎就像一个厨房,在这个厨房里,节点就像装满新鲜食材的冰箱。

节点有很多种类型,显示图片的、播放声音的、显示三维模型的,等等。总共有几十个。

节点

让我们从基础谈起。节点是创建游戏的最基础的元素,它具有以下一些特征:

  • 名称
  • 可编辑的属性
  • 能接收回调,以便处理每帧(Frame)相关效果
  • 可以被扩展,以便拥有更多功能
  • 可以被添加为其它节点的子节点

img_da3d75e9ca67b9f85069992caff0ada6.png

最后一点非常重要:节点能让其它节点作为子节点。这样组合出来,就变成了我们常说的状。

Godot中这种树状组织能力创建了一种强大的项目管理工具。由于不同的节点有不同的功能,通过组合它们就足以创建更复杂的功能。

这样讲你肯定还没有什么感觉,但Godot所有的知识点都与上面这些特征有关,你现在只要记住有节点这么个概念,并且节点能按树状组合就好了。

场景

img_0512386935c9c01f7df7cf215b8ae818.png

有了节点的概念后,下一步就是要给你解释什么是场景了。

场景就是由一组按树状层级结构组织的节点组成。它有下列属性:

  • 一个场景只有一个根节点
  • 场景可以被保存到硬盘上并被加载回来
  • 场景可被实例化 (稍后会有更多描述)
  • 运行一款游戏意味着在运行一个场景
  • 一个项目中可以有多个场景,但启动时必须指定其中一个用于初始加载的场景

Godot编辑器其实就是一个场景编辑器。它有丰富的用于编辑二维和三维场景的相关工具,这些工具都是围绕编辑节点和场景的概念的。

创建项目

光讲理论很无聊了吧,那让我们来点实践性的:用编辑器来做个“Hello world”。

当没有启动具体项目时,Godot会打开项目管理器,用于帮助开发者管理项目。

img_576a9b6e0a5b59a65bf8b6522170de27.png

点"New Project"创建新项目,这个时候需要选择项目路径并指定项目名称:

img_a019f7ec7a12a6b74990d34e45f2281d.png

编辑器

创建好新项目后,下一步就是打开它,这样就启动了Godot编辑器。编辑器的效果大致是这样:

img_1d2f142084716a1d0bd26b0547d660ed.png

上面提过,在Godot中制作游戏就像到了厨房,先打开冰箱,然后添加一些新鲜的节点到项目中。让我们开始“Hello World”吧,点击"New Node"按钮:

img_cb1e94d5b4dad2b1cd5ff7cb91825844.png

打开“Create Node”对话框,界面显示了一长列可用节点吧:

img_38fd6b8113e083738124b4c31c01006d.png

先选择“Label”节点,可以在上方快速搜索:

img_398fe3bc5f8a092beef5122dd2b09119.png

最后,创建标签!“Create”按钮被点击后,会发生很多事情:

img_6cdf5c791f0bab4e3f8ac58c53b5869d.png

首先,场景变成2D编辑器,因为Label是个二维节点,Label会出现Viewpoint左上角、被选中状态。

同时,该节点出现在Scene树编辑器,标签属性则出现在Inspector。

下面,我们来修改该标签的“Text”属性,改成"Hello, World!":

img_641f5857ccd2b9366ff8cf01c553d831.png

好了,这样就可以运行场景了!点击顶部栏的播放场景的按钮或按F6:

img_ba7e1d13450f55ea3ac472c75c8cbcf8.png

哎呀...

img_50d2491f47cdbc1519fd9bcd8126f747.png

提示场景需要保存了才能运行;保存场景,文件名比如叫做 hello.scn:

img_0dcdd8c313cfb3df16f6b1cc6ecff665.png

该场景只允许保存在该项目中。项目的根 "res://" 代表资源路径。

保存场景后再点“运行场景”,“Hello, World!”这个demo应该就开始执行了:

img_973035ce832958e8820e3fa3005c77d2.png

搞定!

.. _doc_scenes_and_nodes-configuring_the_project:

配置项目

项目中,如果有多个场景,必须指定一个主场景 - 在运行时初始被载入的。

这些设置都被保存在engine.cfg中,这是一种win.ini这样的纯文本格式,编辑起来很简单。因为项目设置项很多,所以可以通过“项目设置”对话框来直观操作。

通过菜单Scene -> Project Settings可以访问该对话框。

该窗口被打开时,要选择主场景,很简单,切换到application/main_scene属性,选择'hello.scn'即可。

img_ed391db29f41b73ed3456bfeca08257a.png

完成设置后,点“运行按钮”或F5键会开始运行该项目。

再打开项目设置对话框,其中显示了很多可用选项及默认值。如果默认值没问题的话就不需要动它。

当其中一项值被改动,其名称左侧会出现一个标记,代表该值将会保存到engine.cfg文件中。

其实还可以添加自定义配置选项并在运行时被读入
:ref:Globals <class_Globals> 单例对象中.

未完待续...

下一节会涉及多个场景及多个节点!

原文:http://docs.godotengine.org/en/latest/tutorials/step_by_step/scenes_and_nodes.html

相关文章:

EOS与以太坊有哪些区别?

想知道更多关于区块链技术知识&#xff0c;请百度【链客区块链技术问答社区】 链客&#xff0c;有问必答&#xff01;&#xff01;EOS与以太坊有哪些区别&#xff1f; 以太坊是一个专门为开发和运行去中心化应用&#xff08;DAPP&#xff09;搭建的智能合约平台&#xff1b;EOS…

图像特征点检测与匹配评价准则——量化

欢迎转载&#xff0c;转载请注明出处&#xff0c;谢谢&#xff01; 目前图像匹配中&#xff0c;局部特征匹配占据了绝大部分&#xff0c;常用的局部特征匹配方法有Harris、SIFT、SURF、ORB等等&#xff0c;不同的特征点检测和匹配方法尤其独特的优势和不足&#xff1b; 特征点匹…

path,classpath

1.path作用. 在环境变量里面配置 winr 打开cmd qq窗口就弹开了。 2.classpath是java里的选项。 java执行java类的时候&#xff0c;会去看这个java类是否在classpath路径下。不在就不能编译转载于:https://www.cnblogs.com/shapeOfMyHeart/p/5975686.html

【Codeforces】401C Team (01010110...)

http://codeforces.com/contest/401/problem/C 题目中&#xff0c;n表示0的个数&#xff0c;m表示1的个数&#xff0c;要求两个0不能连续&#xff0c;三个1不能连续 还要判断能否输出满足要求的序列&#xff0c;不满足输出-1 满足条件以后徐瑶分情况讨论 当1比0多&#xff…

表白这件事,比解 bug 要难多少?

情人节快乐&#xff01;我是可爱无敌的阿里妹。 今天是个粉红色日子&#xff0c;我们来聊聊和技术无关的“技术活”&#xff0c;比如&#xff1a; “如何表白&#xff1f;” 当技术人碰上动心的姑娘&#xff0c;他的浪漫开关就打开了。 在代码王国里劈荆斩刺的王子&#xff0c;…

特征点匹配+特征检测方法汇总

特征点匹配特征检测方法汇总特征提取与匹配---SURF&#xff1b;SIFT&#xff1b;ORB&#xff1b;FAST&#xff1b;Harris角点匹配方法匹配函数1. OpenCV提供了两种Matching方式&#xff1a;• Brute-force matcher (cv::BFMatcher) //暴力方法找到点集1中每个descriptor在点…

元数据驱动的微服务架构(上)

本次分享有两个部分&#xff1a; 微服务架构需要元数据 介绍微服务与元数据的关系。 一、微服务架构需要元数据 企业IT架构已经发展了多个阶段&#xff0c;一方面是服务化架构的发展&#xff0c;在SOA阶段主要解决应用间集成问题&#xff0c;但随着企业业务的发展&#xff0c;…

【Codeforces】427B Prison Transfer(别让罪犯跑了...)

http://codeforces.com/problemset/problem/427/B 从一串数字中选出连续的长度为c的子串&#xff0c;且子串中的每一个数都不能大于t&#xff0c;问这样的子串有多少个 TLE&#xff0c;看看n的范围就知道了&#xff0c;哎呀呀&#xff0c;有点chun #include <iostream>…

PHPUnit实践三(构建模块化的测试单元)

本系列教程所有的PHPUnit测试基于PHPUnit6.5.9版本&#xff0c;Lumen 5.5框架 目录结构 模块下的目录是符合Lumen的模块结构的如&#xff1a;Controllers、Models、Logics等是Lumen模块目录下的结构目录如果有自己的目录同级分配即可&#xff0c;如我这里的Requests 整体结构 ├…

SLAM笔记(五)光束平差法(Bundle Adjustment)

1.什么是光束平差法 前边的八点法&#xff0c;五点法等可以求出闭式解的前提是已经知道确切的点对。但实际情况中往往存在大量的噪声&#xff0c;点与点不是精确地对应甚至出现一些错误匹配。 光束平差法由Bundle Adjustment翻译得来&#xff0c;有两层意思&#xff1a; 对场…

【Code forces】63B Settlers' Training

http://codeforces.com/problemset/problem/63/B 给你一串数字&#xff0c;直到所有数字都变为k为止&#xff0c;相同的数为一组&#xff0c;在一次中&#xff0c;所有不同的数都加1 1 2 2 3 → 2 2 3 4 → 2 3 4 4 → 3 4 4 4 → 4 4 4 4 #include <ios…

[elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić

上一章我们提出了一个基本版的deftraceable宏&#xff0c;能让我们编写可跟踪的函数。宏的最终版本有一些剩余的问题&#xff0c;今天我们将解决其中的一个——参数模式匹配。 今天的练习表明我们必须仔细考虑宏可能接收到的输入。 问题 正如我上一次暗示的那样&#xff0c;当前…

vue-cli3环境变量与分环境打包

第一步 : 了解环境变量概念 我们可以根目录中的下列文件来指定环境变量: .env # 在所有的环境中被载入 .env.local # 在所有的环境中被载入&#xff0c;但会被 git 忽略 .env.[mode] # 只在指定的模式中被载入 .env.[mode].local # 只在指定…

SLAM闭合回环————视觉词典BOW小结

在目前实际的视觉SLAM中&#xff0c;闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2&#xff0c;而bag of words 又运用了数据挖掘的K-means聚类算法&#xff0c;笔者只通过bag of words 模型用在图像处理中进行形象讲解&#xff0c;并没有涉及太多对SLAM的闭环检测…

【Codeforces】53D Physical Education (有点像冒泡)

http://codeforces.com/problemset/problem/53/D 从上面所给的序列变成下面所给的序列 交换的时候只能交换相邻的两个数字 输出每一步的交换方法&#xff0c;输出的是该元素在序列中的位置&#xff08;第一个数的位置是1&#xff09; 不要求输出步数最少的那一种方法 当同…

js脚本冷知识

js中有个很恶心的写法。比如这个var adsf(function(){})();这样的写法&#xff0c;主要是原生的&#xff0c;能在dom元素加载完之后实现自动加载这个脚本文件到里面去。可以验证这个&#xff08;function(){.......&#xff09;&#xff08;&#xff09;;在.......里面可以直接…

Python中is同一性运算符和==相等运算符区别

2019独角兽企业重金招聘Python工程师标准>>> 在区分is和这两种运算符区别之前&#xff0c;需要知道Python中对象包含的三个基本要素&#xff0c;分别是&#xff1a;id(身份标识)、type(数据类型)和value(值)。 比较对象的value(值) 是python标准操作符中的比较操作符…

C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)

排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法&#xff0c;其分类如下&#xff1a; 比较排序&#xff1a; 直接插入排序 希尔排序 &#xff08;插入&#xff09; 冒泡排序 快速排序 (交换) 直接选择排序 堆排序&#xff08;选择&#…

32位处理器是什么意思

问题描述&#xff1a;朋友那个32位处理器&#xff0c;2的32次方算出来的单位是不是应该是4294967296位&#xff08;bit&#xff09;吧&#xff0c;怎么就成字节了呢&#xff1f;单位错了&#xff0c;那个32位是指32位地址总线&#xff0c;而不是32位数据。地址的数量单位是个&a…

【Codeforces】913C Party Lemonade (贪...)。

http://codeforces.com/contest/913/problem/C 这个题和以前见过的有点不一样&#xff0c;可以重复选择&#xff0c;这个有点emmm 首先将a数组优化&#xff0c;举个例子&#xff0c;如果1L20元&#xff0c;2L50元&#xff0c;那么将a[1]赋值为40&#xff0c;而不是50。 之后…

GDB 调试 Mysql 实战(二)GDB 调试打印

背景 在 https://mengkang.net/1328.html 实验中&#xff0c;我们通过optimizer_trace发现group by会使用intermediate_tmp_table&#xff0c;而且里面的的row_length是20&#xff0c;抱着"打破砂锅问到底"的求学精神&#xff0c;所以想通过 gdb 调试源码的方式看这个…

移动端AR的适用分析(二)

移动端AR的适用分析&#xff08;二&#xff09;1. 单目SLAM难点 2. 视觉SLAM难点 3. 可能的解决思路 单目slam的障碍来自于理论和实践两个方面。理论障碍可以看做是固有的&#xff0c;无法通过硬件选型或软件算法来解决的&#xff0c;例如单目初始化和尺度问题。实践问题包括计…

新的理念、 新的解决方案、 新的Azure Stack技术预览

Jeffrey Snover 我们很高兴地宣布︰ Azure Stack Technical Preview 2&#xff08;TP2&#xff09;已发布&#xff01;我们朝着向您的数据中心提供Azure服务能力的目标又更近一步。自发布第一个技术预览版&#xff08;TP1&#xff09;以来&#xff0c;我们访问了很多用户&…

【HDU】1084 What Is Your Grade? (结构体 sort)

http://acm.hdu.edu.cn/showproblem.php?pid1084 题目的关键&#xff1a; 1、Note, only 1 student will get the score 95 when 3 students have solved 4 problems. If you can solve 4 problems, you can also get a high score 95 or 90 (you can get the former(前者)…

FastDFS之Linux下搭建

1.软件环境 CentOS6.5 FastDFS v5.05 libfastcommon- - master.zip&#xff08;是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库&#xff09; fastdfs- - nginx- - module_v1.16.tar.gz nginx- - 1.6.2.tar.gz fastdfs_client_java._v1.25.tar.gz 2.FastDFS集群规划 描述 …

Linux进程与线程的区别 详细总结(面试经验总结)

首先&#xff0c;简要了解一下进程和线程。对于操作系统而言&#xff0c;进程是核心之核心&#xff0c;整个现代操作系统的根本&#xff0c;就是以进程为单位在执行任务。系统的管理架构也是基于进程层面的。在按下电源键之后&#xff0c;计算机就开始了复杂的启动过程&#xf…

【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)

http://poj.org/problem?id1411 POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode1689 ZOJ http://acm.hdu.edu.cn/showproblem.php?pid1239 HDU 都是同一个题&#xff0c;但是可能你在HDU上AC&#xff0c;在POJ和ZOJ上是TLE&#xff08;所以还有待…

[AVR]使用AVR单片机驱动舵机

最近参加了三系举办的小车比赛(好像叫什么"驭远杯")。领导要求我驱动3-4个舵机。研究了几日&#xff0c;总算折腾出一个方案..、 1.舵机驱动的基本原理 &#xff08;可以参考http://blog.sina.com.cn/s/blog_8240cbef01018hu1.html&#xff09; "控制信号由接收…

高阶函数的使用

问题 字节跳动面试时问题&#xff1a;原函数例如fetchData是一个异步函数&#xff0c;尝试从服务器端获取一些信息并返回一个Promise。写一个新的函数可以自动重试一定次数&#xff0c;并且在使用上和原函数没有区别。 思路 这个问题其实不是很难&#xff0c;不过可能是太菜了紧…

内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)

一、定义&#xff08;概念与区别&#xff09; 内存溢出 out of memory&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现out of memory&#xff1b;比如申请 了一个integer,但给它存了long才能存下的数&#xff0c;那就是内存溢出。 …