当前位置: 首页 > news >正文

Godot《躲避小兵》实战之为游戏添加音效

现在,我们已经完成了游戏的所有功能。以下是一些剩余的步骤,为游戏加点“料”,改善游戏体验。

随意用你自己的想法扩展游戏玩法。

背景

默认的灰色背景不是很吸引人,那么我们就来改一下颜色。一种方法是使用 ColorRect节点。将其设为 Main 下的第一个节点,这样这个节点就会绘制在其他节点之后。

在这里插入图片描述

ColorRect 只有一个属性:Color(颜色)。选择一个你喜欢的颜色,然后在视口顶部的工具栏或者检查器中选择“布局”->“锚点预设”->“整个矩形”(Layout -> Anchors Preset -> Full Rect),使其覆盖屏幕。

在这里插入图片描述

如果你有背景图片, 你也可以通过使用 TextureRect 节点来添加背景图片.

音效

声音和音乐可能是增强游戏吸引力的最有效方法。在游戏 art 文件夹中,有两个声音文件:“House in a Forest Loop.ogg”用于背景音乐,而“gameover.wav”用于当玩家失败时。

添加两个 AudioStreamPlayer 节点作为 Main 的子节点。将其中一个命名为 Music,将另一个命名为 DeathSound。 在每个节点选项上,点击 Stream 属性,选择 加载,然后选择相应的音频文件。

所有音频都会在禁用 循环 设置的情况下自动导入。如果希望音乐无缝循环,请单击流文件下拉箭头,选择 唯一化,然后再单击流文件并选中 循环 框。

要播放音乐, 在 new_game() 函数中添加 $Music.play(), 在 game_over() 函数中添加 $Music.stop() .

最后, 在 game_over() 函数中添加 $DeathSound.play() .

func game_over():# 定时器停止$ScoreTimer.stop()# 生成怪物定时器停止$MobTimer.stop()# 执行UI游戏结束的逻辑$HUD.show_game_over()# 背景音乐停止$Music.stop()# 播放死亡音乐$DeathSound.play()func new_game():score = 0# 调用玩家start方法$Player.start($StartPostion.position)# 倒计时2秒开始$StartTimer.start()# 更新分数$HUD.update_score(score)# 显示消息$HUD.show_message("Get Ready")# 销毁该分组中的怪物对象get_tree().call_group("mobs", "queue_free")# 循环播放背景音乐$Music.play()

键盘快捷键

当游戏使用键盘控制,可以方便地按键盘上的键来启动游戏。一种方法是使用 Button 节点的 “Shortcut”(快捷键)属性。

在上一课中,我们创建了四个输入动作来移动角色。我们将创建一个类似的输入动作来映射到开始按钮。

选择“项目 -> 项目设置”,然后单击“输入映射”选项卡。与创建移动输入动作的方式相同,创建一个名为 start_game 的新输入操作,并为 Enter 添加按键映射。

在这里插入图片描述

如果你有一个手柄,现在可以添加一个手柄支持。连接上你的手柄,然后在每一个你想添加手柄支持的输入动作下,点击 “+” 按钮然后按下该输入动作对应的按钮,方向键或者摇杆。

HUD 场景中,选择 StartButton 并在检查器中找到它的 **Shortcut(快捷方式)**属性。通过在框中单击来创建一个新的 快捷键资源,打开 Events(事件) 数组并通过单击 Array[InputEvent] (size 0) 向其添加一个新的数组元素。

在这里插入图片描述

创建一个新的 InputEventAction并将其命名为 start_game

在这里插入图片描述

这样,开始按钮出现后,你就可以点击它或按 Enter 来启动游戏。

就这样,你在 Godot 中完成了你的第一个 2D 游戏。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【IoTDB 线上小课 06】列式写入=时序数据写入性能“利器”?
  • 智能ai写作哪个好用?这几款工具让你的写作更加高效
  • .NET 给NuGet包添加Readme
  • 个性化营销:数字化时代的致胜法宝
  • 【C语言】常见文件操作
  • RK3588开发笔记-pdm接口ES7201音频采集调试记录
  • 安科瑞AEW100电力改造智能电力仪表,体积小巧
  • 深度学习分类:交叉熵
  • 瑞吉外卖--登录退出功能的实现
  • vscode教程
  • 【BES2500x系列 -- RTX5操作系统】Battery模块 -- 邮箱线程诞生的第一视角 -- osThreadDef --(十三)
  • 阿里巴巴发布Q1财报:电商份额趋稳,市场不再悲观
  • IPC 摄像头通过什么技术实现远程查看
  • 光储电站联合配置!多种调度模式下的光储电站经济性最优储能容量配置分析程序代码!
  • C++ | Leetcode C++题解之第372题超级次方
  • Debian下无root权限使用Python访问Oracle
  • go语言学习初探(一)
  • jquery cookie
  • Leetcode 27 Remove Element
  • react-native 安卓真机环境搭建
  • spring security oauth2 password授权模式
  • 高性能JavaScript阅读简记(三)
  • 关于Java中分层中遇到的一些问题
  • 目录与文件属性:编写ls
  • 深度学习中的信息论知识详解
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 阿里云API、SDK和CLI应用实践方案
  • ​ubuntu下安装kvm虚拟机
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #QT(串口助手-界面)
  • #vue3 实现前端下载excel文件模板功能
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (003)SlickEdit Unity的补全
  • (2)STL算法之元素计数
  • (6)STL算法之转换
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (ZT)一个美国文科博士的YardLife
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)docker:Dockerfile构建容器运行jar包
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (算法)硬币问题
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (转)Mysql的优化设置
  • (转)ObjectiveC 深浅拷贝学习
  • . NET自动找可写目录
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 调用海康SDK以及常见的坑解释