![](https://img-blog.csdnimg.cn/20201208201904892.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kids Can Code
文章平均质量分 83
您准备好学习游戏开发了吗? 无论是业余爱好还是追求梦想的职业,没有比现在更好的开始时间了。 现代编程语言和工具使制作高质量游戏并将其发布到世界各地比以往更加容易。 这些工具之一是Godot游戏引擎。 对于初学者,它提供了一种学习Gamedev技术的友好方式。 对于经验丰富的开发人员来说,这是一个功能
不想打工
这个作者很懒,什么都没留下…
展开
-
多目标相机(我提供了C#的实现)
多目标相机问题你需要一个可以移动和缩放的动态相机来保持多个对象同时出现在屏幕上。例如,在两名玩家的游戏中,当两名玩家走得越来越远或越来越近时,他们仍保持出现在屏幕上,就像这样:解决方案在单人游戏中,你可能习惯于将相机连接到玩家身上,这样它就会自动跟随玩家。我们在这里不能真正做到这一点,因为我们有2个(或更多)玩家或其他游戏对象,我们希望一直保持在屏幕上。我们需要我们的相机做3件事:添加/删除任意数量的目标。使相机的位置居中于所有目标的中心。调整相机的变焦,使所有目标都在屏幕上。用C翻译 2021-04-17 13:42:22 · 472 阅读 · 0 评论 -
12.保存设置
目录保存设置保存设置关于屏幕保存设置保存设置我们已经在游戏中添加了三个切换属性-这工作得很好-但当我们退出时,设置不保留。我们需要保存这些设置,以便下次运行游戏时,它们会持续存在。首先,我们将在res://settings.gd中定义我们的设置文件。var settings_file = "user://settings.save"接下来,我们将为我们要保存的三个游戏设置添加保存/加载功能。func save_settings(): var f = F翻译 2021-01-06 15:02:32 · 462 阅读 · 0 评论 -
11.移动广告
目录移动广告关于广告设置Admob使用Godot模块配置导出代码禁用广告移动广告关于广告当你创造一款免费手机游戏时,在盈利方面你有两个选择:应用内部购买和广告。在这一部分,我们将着眼于如何将手机广告平台(Admob)整合到你的游戏中。广告可能是不受欢迎的,是否使用广告是由各个游戏开发者自己决定的。我们在本教程中并不是要对利弊做出决定–我们是来告诉你,如果你想在游戏中放广告,如何在游戏中放广告。设置Admob前往Admob并创建一个账号。在AdMob管理翻译 2021-01-06 14:54:37 · 409 阅读 · 0 评论 -
7.移动圆圈
目录移动圆圈修复bug分数和等级移动圆圈移动圆圈修复bug我们的第一个任务是修复我们菜单系统的一个bug。按下 "开始 "按钮可以启动一个新的游戏,但当屏幕移开时,可以再次按下。尝试 "滥用 "开始按钮–灾难随之而来!我们可以通过在屏幕过渡时禁用按钮来解决这个问题。由于我们把所有的按钮都放在一个 "buttons "组中,我们可以很容易地用call_group()来实现。这是更新后的BaseScreen.gd:extends CanvasLayeronready翻译 2021-01-06 11:11:09 · 167 阅读 · 0 评论 -
6.声音和颜色
目录声音和颜色设置单例添加声音声音设置颜色主题声音和颜色设置单例首先,我们在脚本选项卡中选择文件->新建脚本来添加一个新的脚本。将脚本命名为settings.gd。在这个脚本中,我们将放置游戏的配置设置。var enable_sound = truevar enable_music = truevar circles_per_level = 5打开 "项目设置 "并选择 "自动加载 "选项卡,将脚本添加为自动加载。点击要加载脚本的文件夹,然后点击翻译 2021-01-06 11:02:00 · 103 阅读 · 0 评论 -
5.分数和 HUD
目录分数和HUDHUD场景消息动画HUD脚本分数和HUD在上一部分中,我们以菜单的形式添加了UI来启动和配置游戏。我们还需要一个UI来显示游戏中的信息,比如分数。HUD场景添加一个新的场景,以CanvasLayer为根,作为我们的HUD。给它两个子节点:一个名为 "ScoreBox "的MarginContainer和一个名为 "Message "的`Label。你的场景树应该是这样的:将 ScoreBox 的布局设置为 “Bottom Wide”,Cust..翻译 2021-01-06 10:42:51 · 96 阅读 · 0 评论 -
4.菜单
目录菜单菜单屏幕菜单现在我们已经有了基本的游戏玩法,是时候开始研究用户界面了。我们将需要菜单屏幕来显示标题、设置和游戏结束。菜单屏幕这三个屏幕将共享一个共同的布局和一些功能,所以我们将从一个基本场景开始,它们都可以继承。在新的场景中,从一个CanvasLayer开始,并将其命名为BaseScreen。将这个场景保存在 "UI "文件夹中。CanvasLayer (“BaseScreen”) MarginContainer VBoxContainer Label翻译 2020-12-28 17:30:37 · 136 阅读 · 0 评论 -
3.有限圆圈
有限圆圈在前两部分中,我们得到了基本的游戏玩法。现在我们要开始给圆圈添加一些不同的模式。圆圈模式最终,我们会有许多不同的模式,但我们将从 "有限 "模式开始:圆圈在消失之前只允许给定数量的轨道。首先,让我们添加一个Label节点来显示剩余轨道的数量。在文本字段中输入一个数字(1),这样我们就可以看到它的样子。在 "自定义字体 "部分,添加一个新的DynamicFont,从assets文件夹中加载字体数据,并将大小设置为64。要对齐标签,在 "布局 "菜单中,选择 “居中”。在Circl翻译 2020-12-28 10:28:26 · 92 阅读 · 0 评论 -
2.产生圆圈
目录产生圆圈扩展主场景为主要场景编写脚本调整尾迹圆圈动画“向内收缩”动画捕捉动画在Github上关注这个项目:https://github.com/kidscancode/circle_jump产生圆圈在上一部分中,我们创建了构成游戏大部分的Jumper和Circle对象。 现在我们需要添加进度:只要player没有错过,就会连续产生一系列的圆圈。扩展主场景让我们再给Main添加一些节点。 Position2D (“StartPosition”)翻译 2020-12-24 09:14:59 · 191 阅读 · 0 评论 -
1.项目设置
PROJECT SETUP从哪里开始?根据游戏的不同,以及你的想法有多丰满,答案可能很不一样。在我们的情况下,我已经做了一个游戏的原型,并提前想出了一些想法,这有点作弊。不过,它和我最初的想法还是有些分歧,这个系列也可能会如此–时间会证明一切。在一个更大的项目中,你可能会从设计文档开始,它可以是简单的一页笔记,也可以是复杂的500页论文,阐述你的游戏世界、剧情和机制的每一个细节。我们在这里不需要这么多涉及的东西,所以我们只需要介绍一下游戏计划。游戏计划在这款游戏中,玩家控制着一个 “角色”,翻译 2020-12-24 08:45:15 · 120 阅读 · 0 评论 -
圈圈跳跃
圈圈跳跃端到端游戏开发系列。在本系列中,我们构建了一个称为“ Circle Jump”的单触式移动游戏。 游戏外观如下:在本系列的每个部分中,我们将添加特性并修复bug,并解释整个过程。游戏将在以下平台推出。Android:Google Play Store iOS: coming soon Web:Game of the Month你也可以从Itch.io下载它的桌面平台。 Circle Jump bykidscancode...翻译 2020-12-23 08:49:59 · 139 阅读 · 0 评论 -
▶游戏
游戏演示游戏和教程。在这些章节:移动游戏: 圈圈跳跃翻译 2020-12-23 08:46:19 · 164 阅读 · 1 评论 -
音频管理器
音频管理器目录音频管理器问题解决方案示例项目问题您已经尝试将AudioStreamPlayer添加到暴徒/硬币/等。 在对象死亡或被收集时播放。 但是问题在于,当您删除对象时,音频播放器会随之播放,从而切断声音。 您需要一种更简单的方法来管理播放音频。解决方案我们将用一个在SceneTree中任何地方都可以使用的节点来解决这个问题。这个节点管理一组AudioStreamPlayer节点和一个要播放的声音流队列。在脚本编辑器中创建一个新的脚本。extends No翻译 2020-12-23 08:42:52 · 150 阅读 · 0 评论 -
▶音频
音频帮助你在游戏中添加音效和音乐的食谱。在这些章节:音频管理器翻译 2020-12-23 08:42:03 · 82 阅读 · 0 评论 -
模糊着色器
目录模糊着色器问题解决方案相关食谱模糊着色器问题你想让一个着色器模糊一个物体或屏幕。解决方案shader_type canvas_item;uniform float blur_amount : hint_range(0, 5);void fragment() { COLOR = textureLod(SCREEN_TEXTURE, SCREEN_UV, blur_amount);}例如,为了逐渐模糊整个画面,比如为了实现场景过渡效果。..翻译 2020-12-23 08:40:48 · 185 阅读 · 0 评论 -
灰度(单色)着色器
目录灰度(单色)着色器问题解决方案相关食谱灰度(单色)着色器问题你想要一个着色器将图像转换为灰度。解决方案让我们从canvas_item(2D)着色器开始。为了转换为灰度,同时也保留像素的对比度,我们需要对像素的颜色值进行平均。将颜色通道相加,然后除以3。shader_type canvas_item;void fragment() { COLOR = texture(TEXTURE, UV); float avg = (COLOR.r + CO翻译 2020-12-23 08:40:28 · 164 阅读 · 0 评论 -
与着色器交互
目录与着色器交互问题解决方案相关食谱与着色器交互问题你想与GDScript中的Godot着色器进行交互。解决方案要从GDScript中访问uniform的值,可以在对象的材质属性上使用set_shader_param()。如果附加的材质是ShaderMaterial,那么你可以这样访问它。node.material.set_shader_param("param_name", value)你也可以用set_shader_param()来改变这个值。关于这个翻译 2020-12-23 08:40:10 · 75 阅读 · 0 评论 -
着色器:介绍
目录着色器:介绍问题解决方案片段着色器UV坐标纹理随时间变化顶点着色器Uniforms提示结束着色器:介绍问题你想开始编写着色器。解决方案着色器是在计算机的GPU(图形卡)上运行的特殊程序。GPU经过优化,可以非常高效地执行某些类型的数学运算。Shader代码可以附加到对象上,以影响它们在屏幕上的渲染方式。着色器程序的输出是对象的像素集的颜色。着色器可以在2D(canvas_item着色器)和3D(spatial 着色器)中使用。新手对翻译 2020-12-23 08:39:48 · 595 阅读 · 0 评论 -
▶着色器
着色器深的巫术。酷的效果.在这些章节:着色器:介绍 与着色器交互 灰度(单色)着色器 模糊着色器翻译 2020-12-23 08:38:54 · 117 阅读 · 0 评论 -
追踪导弹
目录追踪导弹问题解决方案相关食谱追踪导弹问题你需要一枚 “追踪导弹”–一种会寻找移动目标的炮弹。解决方案在这个例子中,我们将使用一个Area2D节点作为炮弹。对于子弹来说,Area是最好的好选择,因为我们需要检测它们何时接触到什么东西。如果你也需要一个会弹跳的子弹,PhysicsBody类型的节点可能是一个更好的选择。导弹的节点设置和行为与你对 "哑弹 "的设置是一样的。如果你正在创建许多子弹类型,你可以使用继承来将所有的弹丸基于相同的核心设置。我们将使用的节点。翻译 2020-12-22 08:48:58 · 215 阅读 · 0 评论 -
改变行为
目录改变行为问题解决方案扩展中相关食谱改变行为问题您希望您的AI控制实体在不同行为之间切换。解决方案在这个例子中,我们将假设一个具有以下行为的敌人。关于如何使每个行为发挥作用,请参见各个配方。 巡逻 "巡逻 "状态沿着预先定义的路径移动(如果没有指定路径则静止不动)。详见食谱:路径跟随。 追踪 "追逐 "状态下,敌人会向玩家移动。如何做出这个行为,请参考食谱:追击玩家。 攻击 在此状态下,玩家处于近战攻击的范围内,所以敌人会停止移动并翻译 2020-12-22 08:48:37 · 104 阅读 · 0 评论 -
跟随路径
目录跟随路径问题解决方案绘制路径沿着路径移动跟随路径问题你想让一个角色按照预先设定的路径走,例如警卫巡逻或跟随道路的汽车。解决方案有很多方法可以解决此问题。 在此解决方案中,我们将使用Godot的Path2D节点(或3D的Path)作为在编辑器中绘制路径的便捷方法。你可以将Path2D添加为你的主场景、地图或其他有意义的位置的子节点。但不要让它成为遵循路径的物体的子节点–否则路径会随着玩家的移动而移动!绘制路径添加Path2D节点后,你会看到视口上方出现一翻译 2020-12-22 08:48:16 · 312 阅读 · 0 评论 -
追逐玩家
目录追逐玩家问题局限性相关食谱追逐玩家问题您希望敌人追逐玩家。解决方案让敌人追踪玩家的第一步是确定敌人需要移动的方向。为了得到从A指向B的向量,你要减去:B-A。将结果归一化,你就有了一个方向向量。这样一来,解决方法就很简单了。每一帧,将敌人的速度设置为指向玩家的方向。velocity = (player.position - position).normalized() * speedGodot的Vector2对象有一个内置的助手。veloci..翻译 2020-12-22 08:47:42 · 155 阅读 · 0 评论 -
▶AI /行为
AI /行为自动化的行为和(有时)更智能的实体。在这些章节:追逐玩家 跟随路径 改变行为 追踪导弹翻译 2020-12-22 08:46:49 · 100 阅读 · 0 评论 -
传送带
目录传送带问题解决方案设置皮带动画3D相关食谱传送带问题您想要制作一个可以移动物体(运动体或刚体)的传送带对象。解决方案你可以仅使用StaticBody2D制作一个传送带对象,通过它的constant_linear_velocity属性。有关如何在3D中解决此问题的信息,请参见下文。这是一个例子,只用了一个StaticBody2D和一个RigidBody2D。没有添加任何代码。静态体的Constant Linear Velocity被设置为(200,翻译 2020-12-22 08:41:02 · 151 阅读 · 0 评论 -
使用2D关节
目录使用2D关节问题解决方案属性PinJoint2DDampedSpringJoint2DGrooveJoint2D使用2D关节问题你想了解Godot的Joint2D节点。解决方案Joint 用于约束附加物理对象的运动。 对于任何Joint 节点,您需要附加两个物体,这些物体必须从PhysicsObject2D扩展。属性这些属性是所有Joint 节点共同的。 节点A和节点B:指定的物理体 Bias:当两个物体分开时,Joint 将它们拉翻译 2020-12-21 09:53:22 · 108 阅读 · 0 评论 -
运动学体与刚体交互
目录运动学体与刚体交互问题解决方案相关食谱运动学体与刚体交互问题你要让你的运动学角色与刚体互动。解决方案这个配方在2D和3D节点中同样适用。默认情况下,使用 move_and_slide()或 move_and_collide()移动的运动体将推动任何与其碰撞的刚体。由于运动学移动函数的 infinite_inertia 参数,这种交互会忽略刚体的物理属性。在某些情况下,这可能就是您所需要的。 但是,如果要避免身体重叠,穿墙和其他不切实际的行为等“毛病”,翻译 2020-12-21 09:52:49 · 105 阅读 · 0 评论 -
RIGIDBODY2D:拖放
目录RIGIDBODY2D:拖放问题解决方案物体设置主要场景相关食谱RIGIDBODY2D:拖放问题你想用鼠标拿起并移动刚体。解决方案使用刚体可能会很棘手。 Godot的物理引擎控制着它们的运动,而干扰这些运动通常会导致意外的结果。 关键是要利用物体的mode属性。 这同样适用于2D或3D。物体设置我们将从我们的刚体对象开始,添加一个Sprite和CollisionShape2D。如果你想设置Bounce和Friction属性,你还可以添加一个Physic翻译 2020-12-21 09:52:04 · 114 阅读 · 0 评论 -
运动摩擦
目录运动摩擦问题解决方案使用lerp解释相关食谱运动摩擦问题您想为运动学的角色增加摩擦和加速度,从而给它带来更平滑的感觉。解决方案对于大多数游戏,我们不一定对完美的物理模拟感兴趣。我们想要的是动作性、响应性和街机感。这就是为什么你选择一个运动体而不是一个刚性体:这样你就可以直接控制它的行为。然而,一定程度的物理学是好的–这意味着一个物体不会立即改变方向或停下来。以下是简单的运动平台角色的代码:extends KinematicBody2Dvar sp翻译 2020-12-21 09:46:55 · 93 阅读 · 0 评论 -
使用刚体
目录使用刚体介绍使用RigidBody2D堆积木弹丸力控制刚体位置问题结束使用刚体本教程是在Godot Recipes之前编写的。它的格式最终将被更新,以匹配本网站的其他文档。在本教程中,我将解释什么时候(和什么时候不)使用刚性体,它们是如何工作的,并演示一些方便的技巧来使它们符合您的意愿。例子将使用RigidBody2D,但这些经验同样适用于3D。介绍RigidBody2D是Godot中提供模拟物理的物理体。这意味着你不直接控制一个RigidBo翻译 2020-12-21 09:46:19 · 182 阅读 · 0 评论 -
使用KINEMATICBODY2D
目录KINEMATICBODY2D介绍:物理体碰撞形状碰撞层和遮罩例子:运动学体移动与碰撞move_and_collidemove_and_slide使用哪个?例子基本移动反弹/反射和碰撞检测使用move_and_slide进行平台化结束Download the sample projectKINEMATICBODY2DGodot提供了许多碰撞对象来提供碰撞检测和响应。试图决定在你的项目中使用哪一个可能会令人困惑。如果你了解每一个对象的翻译 2020-12-21 09:45:04 · 150 阅读 · 0 评论 -
▶物理
PHYSICSLearn how to use Godot’s physics nodes.In this section:Using KinematicBody2D Using Rigid Bodies Kinematic Friction RigidBody2D: Drag and Drop Kinematic to Rigid Body Interaction Using 2D Joints Conveyor Belt翻译 2020-12-21 09:43:59 · 96 阅读 · 0 评论 -
继承
继承在本教程中,我们将探讨Godot中的继承是如何工作的。您可以在Godot中使用继承来重用代码,并在游戏中创建强大的对象和场景的层次结构。我们来想象一下,我们要做一款经典的俯视视觉RPG游戏,并利用Godot的继承功能,在游戏中创造两种不同的角色。介绍在面向对象编程(OOP)中,继承是一个强大的工具。简单地说,你可以定义一个从另一个类继承的类。一个使用第一个类创建的对象将包含 "主 "类的方法和成员变量以及它自己的方法和成员变量。Godot具有很强的面向对象的特点,它不仅提供了在对象(翻译 2020-12-21 09:42:57 · 634 阅读 · 0 评论 -
▶其他
其他其他的食谱不适合其他地方。在这些章节:继承翻译 2020-12-21 09:41:50 · 68 阅读 · 0 评论 -
向量:使用点积和叉积
目录向量:使用点积和叉积问题解决方案点积叉积实际应用向量:使用点积和叉积问题您想了解点积和叉积的含义。解决方案在这个配方中,我们将介绍矢量点积和交叉积的概念,以及如何使用它们。点积点积是对两个向量的操作,返回一个标量。它通常被看作是向量A在向量B上的投影。这就是点积的计算公式。其中θ为两向量之间的夹角,||A||为A的大小。当两个向量都归一化后(即它们的大小都是1),这个公式就非常有用了,那么这个公式就简化为。表明点积与两个向量之间的角翻译 2020-12-20 23:54:50 · 173 阅读 · 0 评论 -
噪声
目录噪声问题解决方案使用噪声值噪声应用相关食谱噪声问题你想使用Godot的OpenSimplexNoise来生成噪声、噪声纹理和其他效果。解决方案噪声,或更具体地说,梯度噪声是一种生成更自然的“随机”模式的方法。 为此,Godot提供了OpenSimplexNoise类。可能最著名的梯度噪声算法叫做Perlin噪声。因为它和它的后继者simplex noise受专利保护,所以Godot使用了一种叫做OpenSimplex的算法来生成噪声。OpenS..翻译 2020-12-20 23:54:22 · 138 阅读 · 0 评论 -
变换
目录变换2D变换在局部空间和全局空间之间转换3D变换变换在阅读这篇文章之前,请确保你对向量以及它们在游戏开发中的使用有一定的了解。如果你不了解,我推荐你阅读我为Godot文档写的这篇介绍。向量数学。2D变换在2D空间中,我们使用熟悉的X-Y坐标平面。请记住,在Godot中,和大多数计算机图形应用一样,Y轴指向下方。首先,我们来考虑一下这艘漂浮在太空中的飞船。船指向与X轴相同的方向。 如果我们希望它向前移动,则可以添加到它的X坐标,然后它会向左移动:positi翻译 2020-12-20 23:52:18 · 104 阅读 · 0 评论 -
插值
目录插值数值插值向量插值插值线性插值,也就是它的常用缩写lerp,是游戏开发中经常出现的一个术语。如果你从来没有接触过它,它可能看起来很神秘,技术含量很高,但正如你在本教程中看到的那样,它其实是一个简单明了的概念,在游戏编程中有着广泛的应用。数值插值线性插值的核心公式是这样的。func lerp(a, b, t): return (1 - t) * a + t * b在这个公式中,a和b代表两个值,t是插值量,通常用0(返回a)和1(返回b)之间的值表示。该函翻译 2020-12-20 23:50:48 · 279 阅读 · 0 评论 -
▶游戏开发 数学
游戏开发数学数学是游戏开发的重要组成部分。 您可能在学校时记得其中的某些内容,或者可能是您从未遇到过的内容。 在这里,您将找到帮助您快速入门的指南,以及有关如何将这些概念应用于制作游戏的示例。在这些章节:插值 变换 噪声 向量:使用点积和叉积...翻译 2020-12-20 23:50:10 · 124 阅读 · 0 评论 -
径向弹出式菜单
目录径向弹出式菜单问题解决方案相关食谱径向弹出式菜单问题你想要一个径向菜单–一圈按钮,弹出让你选择一个选项。解决方案径向菜单在各种游戏中都有使用,可以进入选择按钮。例如,在游戏中点击一个NPC,可以选择采取什么行动:说话、检查、攻击等。菜单的具体外观和感觉应该与你的游戏美学相匹配。在这个演示中,我们将专注于使菜单正常工作的机制,并将风格选择留给你。这是节点的设置:我们使用一个TextureButton作为我们的根节点。这是你将点击打开/关闭菜单的按钮。翻译 2020-12-19 15:38:13 · 177 阅读 · 0 评论