诗 - 开发日志 #1

作者:Hanshiluoting
2020-11-06
6 1 2

我是韩石泺廷,最近在制作一款名为《诗》的游戏,游戏中的元素主要是诗歌和音乐(详见视频开发日志https://www.bilibili.com/video/BV1Ek4y1C7ps/)。作为一名 indienova 的老粉,我经常阅读 indienova 的公众号文章,也从中学到了很多设计和开发游戏的技巧。由于我自己也在做独立游戏,所以便想到了把开发日志发表到这个平台上,也算给自己一种继续做下去的动力吧。

目前的开发进度

首先,目前的开发进度为:

完成了标题界面的制作;

标题界面

标题界面

实现了诗句以单句出现,玩家通过点击诗句使其显示下一句;

诗句点击交互

诗句点击交互

实现了诗句单句点击环节结束后,整首诗滚动出现并配合音乐;

整首诗滚动出现

整首诗滚动出现

《我看》和《面朝大海,春暖花开》两首诗的制作已经基本完成。

感觉说得不太清楚,我还是建议大家去看看视频,更直观。

然后是本次日志的内容。

本次日志

《诗》中每首诗结束后,整首诗会在屏幕上滚动出现,同时玩家可以通过按一些按键控制鼓声来配合背景音乐。但是,在目前的进度下,玩家只是主动按按键,这样一些比较懒的玩家可能就不会去按了;并且不强制玩家在特定时刻按按键显得本游戏很佛系,没有挑战性。

于是,我打算将每首诗滚动出现时的交互设计成类似音游的形式——玩家根据提示有节奏地按按键。

众所周知,音游主要由“音符”和“判定线”组成,当音符靠近判定线时,玩家需触摸屏幕或点击特定按键,此时程序根据音符和判定线的接近程度对玩家的操作进行评级(一般分为“Perfect”(音符和判定线几乎重合)“Good”(音符和判定线较接近)“Bad”(音符离判定线过远)“Miss”(没有进行操作)四个等级)。根据这种基本规则,我设计了以下的互动方式:

音符、判定线

音符、判定线

中间的圆相当于判定线,外面的圆圈相当于音符。音符的圆圈不断缩小接近判定线,当音符与判定线(即中间圆的边)重合时,玩家按下空格键。此时根据两个圆半径的差来对玩家进行评级。

判定评级

判定评级

评级表现为音符的颜色变化并向外扩散消失。

现在,音符和判定线的交互设计和制作完成了。那么如何将它们套用到曲子中呢?

我的思路是输入每首曲子中创建每个音符的间隔,来实现音符与音乐对应。为了方便编辑,我决定输入每个音符间隔的拍数。但是 Gamemaker Studio 2(我制作游戏的引擎)中计算时间的单位是,那么怎么将拍数转化成帧数呢?

我想到了以下方法:首先,我的游戏中设定每秒为 60 帧。我们又知道每首曲子的节奏(即速度)的单位是 BPM(Beats Per Minute),即拍每分钟。以《我看》的同名配乐为例,它的节奏为 110 BPM,则每分钟有 110 个 4 分音符,即 4 拍。所以,我们可以让每个拍数乘以一个数转化为帧数,而这个数就是 (每分钟秒数*每秒钟帧数) / 歌曲 BPM,即 3600/BPM。假设我想表示《我看》中一拍的长度,则表示为 1 * (3600/110) = 32.727272……

想到这个方法,我觉得我真是把自己给聪明坏了,赶紧去实践下试试。然而,没想到的是,开始音符和节奏还能合上,可到后面却越来越抢拍......我仔细检查了多遍我的代码,没发现任何错误。到底错误出在哪里了呢?

想了半天左右,我终于意识到一个原则性问题——游戏中时间的最小单位是 1 帧,那么如果帧算出来是小数当然就自动取整了!!我被自己蠢到了......

总之,关于这个问题,目前还没有什么解决方法,现在已经很晚了,之后有时间再说吧。

【注:由于本次开发日志的内容大多数是在 11 月 1 日完成的,故标题为 2020/11/1】