我是韩石泺廷,最近在制作一款名为《诗》的游戏,游戏中的元素主要是诗歌和音乐(详见视频开发日志https://www.bilibili.com/video/BV1Ek4y1C7ps/)。作为一名indienova的老粉,我经常阅读indienova的公众号文章,也从中学到了很多设计和开发游戏的技巧。由于我自己也在做独立游戏,所以便想到了把开发日志发表到这个平台上,也算给自己一种继续做下去的动力吧。
首先,目前的开发进度为:
- 完成了标题界面的制作;
- 实现了诗句以单句出现,玩家通过点击诗句使其显示下一句;
- 实现了诗句单句点击环节结束后,整首诗滚动出现并配合音乐;
- 《我看》和《面朝大海,春暖花开》两首诗的制作已经基本完成。
感觉说得不太清楚,我还是建议大家去看看视频,更直观。
然后是本次日志的内容。
《诗》中每首诗结束后,整首诗会在屏幕上滚动出现,同时玩家可以通过按一些按键控制鼓声来配合背景音乐。但是,在目前的进度下,玩家只是主动按按键,这样一些比较懒的玩家可能就不会去按了;并且不强制玩家在特定时刻按按键显得本游戏很佛系,没有挑战性。
于是,我打算将每首诗滚动出现时的交互设计成类似音游的形式——玩家根据提示有节奏地按按键。
众所周知,音游主要由“音符”和“判定线”组成,当音符靠近判定线时,玩家需触摸屏幕或点击特定按键,此时程序根据音符和判定线的接近程度对玩家的操作进行评级(一般分为“Perfect”(音符和判定线几乎重合)“Good”(音符和判定线较接近)“Bad”(音符离判定线过远)“Miss”(没有进行操作)四个等级)。根据这种基本规则,我设计了以下的互动方式:
中间的圆相当于判定线,外面的圆圈相当于音符。音符的圆圈不断缩小接近判定线,当音符与判定线(即中间圆的边)重合时,玩家按下空格键。此时根据两个圆半径的差来对玩家进行评级。
评级表现为音符的颜色变化并向外扩散消失。
现在,音符和判定线的交互设计和制作完成了。那么如何将它们套用到曲子中呢?
我的思路是输入每首曲子中创建每个音符的间隔,来实现音符与音乐对应。为了方便编辑,我决定输入每个音符间隔的拍数。但是Gamemaker Studio 2(我制作游戏的引擎)中计算时间的单位是帧,那么怎么将拍数转化成帧数呢?
我想到了以下方法:首先,我的游戏中设定每秒为60帧。我们又知道每首曲子的节奏(即速度)的单位是BPM(Beats Per Minute),即拍每分钟。以《我看》的同名配乐为例,它的节奏为110BPM,则每分钟有110个4分音符,即4拍。所以,我们可以让每个拍数乘以一个数转化为帧数,而这个数就是(每分钟秒数*每秒钟帧数)/歌曲BPM,即3600/BPM。假设我想表示《我看》中一拍的长度,则表示为1 * (3600/110) = 32.727272......
想到这个方法,我觉得我真是把自己给聪明坏了,赶紧去实践下试试。然而,没想到的是,开始音符和节奏还能合上,可到后面却越来越抢拍......我仔细检查了多遍我的代码,没发现任何错误。到底错误出在哪里了呢?
想了半天左右,我终于意识到一个原则性问题——游戏中时间的最小单位是1帧,那么如果帧算出来是小数当然就自动取整了!!我被自己蠢到了......
总之,关于这个问题,目前还没有什么解决方法,现在已经很晚了,之后有时间再说吧。
【注:由于本次开发日志的内容大多数是在11月1日完成的,故标题为2020/11/1】
暂无关于此日志的评论。