游戏客户端制作节奏大师Like音游(上)

Posted Lampard猿奋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏客户端制作节奏大师Like音游(上)相关的知识,希望对你有一定的参考价值。

【游戏客户端】制作节奏大师Like音游(上)

      大家好,我是Lampard猿奋~~  “节奏大师”相信大家都不陌生,当初这款音游可是风靡全国,风头一时无二。今天要和大家分享如何实现一个节奏大师Like的音游玩法

(一)需求分析

      我们可以简单的把需求拆成四个部分:1.播放背景音乐,2.在某一些时刻掉落音符,3.监听玩家的操作,4.结束时机的判定以及优化

      本文会着重分析前两点,不贴代码只讲思路,希望能帮助到大家~

(二)播放背景音乐

      这是环节中最简单的一环,每一个游戏引擎都会有它们的播放BGM接口。在我们进行游戏的时候,需要暂停游戏当前播放的BGM,并开始播放音游对应的背景音乐

      当然也有一些要注意的地方:1.比如暂停游戏的背景音乐时最好作一下记录,以便游戏结束时恢复游戏原来的背景音乐,2.比如玩家调了静音or关闭了音乐,是否需要手动开启

(三)在某些时刻掉落音符

(1)定义操作序列格式

      作为程序,在这环节我们关注的点无疑就是:什么时候掉落音符?掉落什么音符?

      什么时候掉落音符,掉落什么音符,我把它称为一个操作信息。一开始我的想法是,不如把操作序列按时间的先后处理成一个数组吧,比如:

local OpTbl = 
    [1] = 
        Time = 1,    -- 游戏开始第1秒
        Type = 1,    -- 掉落类型1的控件
    ,
    [2] = 
        Time = 3,    -- 第三秒
        Type = 2,    -- 掉落类型为2的控件
    ,
    ......

      但在后面发现,这种格式无法兼容同时间掉落多个控件这种情况。由于我需要制作的是一个5Key音游,因此我会用一个数组,数组Key为1~5代表音轨编号,Value为OpTbl,代表轨道的操作序列

local Data = 
    [1] = OpTbl1,
    [2] = OpTbl2,
    [3] = OpTbl3.
    [4] = OpTbl4,
    [5] = OpTbl5,

(2) 音符类型

      操作序列的格式我们定义好了,但是一个操作信息仅包含类型和掉落时间就真的够了吗?

      我们以最简单的单击,滑动,长按类型来看,最起码我们需要知道,长按控件需要按多久,滑动控件需要从哪里滑动至哪里

      因此我们需要给我们的操作信息加上这些字段

local OpTbl = 
    [1] = 
        Type = 类型,
        BeginTime = 开始时间,
        EndTime = 结束时间,
        BeginIndex = 开始的位置,
        EndIndex = 结束的位置,
    ,
    [2] = 同上,
    [3] = 同上,
    ...

(3)谁去制作操作序列?

      上文我们定义好了我们需要的操作序列信息,但问题来了,谁去制作这些信息呢?

      有一个简单的方法,就是由策划去填表,让他们听着音乐,然后在excel中标记什么时候第几个音轨需要出现什么控件,每个控件的持续时间,滑动位置等等......

      这不失为一个好办法,牺牲小我,完成大我,用最原视的方式完美地实现需求,就是有点费策划哈哈哈哈哈哈哈哈

(4)Midi数字化乐器接口

      好吧,这个方案肯定是会被无情拒绝的。为了不让耳朵起茧,策划找来了专门制作音效的同学们来完成这一块工作,毕竟需要把专业的事情交给专业的人来做嘛~

      那音效的同学肯定也不会傻傻地去填Excel表,他们有自己地一套工具,比如我对接的音效同学就是使用电子琴,在他认为需要操作的时刻,按压相应的琴键

      那么问题来了,我们怎么去获知音游同学的操作信息呢?这时就要介绍一下midi数字化乐器接口了,当电脑和乐器通过该接口链接起来后,就可以把操作的信息转化为一种.mid格式的文件记录下来

      有兴趣的同学可以看看我之前写的midi相关起源和转接的知识博客:【Midi数字化乐器接口】

   

(5)利用Mido库解析.mid文件

      当我们拿到Mid文件之后,其实是获取不到里面的信息的,因为.mid是二进制文件,此时我们就需要写一个工具来导出相应的内容 

      当我查阅资料(疯狂百度)之后,发现python中的Mido库可以实现这个需求,所以就利用mido库写了一个python脚本,大家可以参考我这一篇文章:【利用mido库解析midi文件】

       当能够解析出midi文件之后,我们只需要和音游同学商定,哪一个琴键代表哪一个音轨,哪一个通道又代表哪一个控件就可以了,踩了无数坑和花费无数心血后,看到整整齐齐的数据不禁泪目

(6)转化列表数据至json格式

      完了吗?没完!我们项目是使用lua作为开发脚本,当利用mido库把mid文件解出来之后,还要多做一步,利用json库的json.dump接口,把数据保存为json格式读取

       下图为部分生成的json数据示例:

(7)启用计时器,每帧判断是否需要生成下落控件

      当我们把操作序列解析出来之后,剩下的内容就简单了。音游开始时,当我们在播放背景同时,启用一个计时器,每帧去判定当前时间下(从开始游戏计时)是否有控件需要下落,有则克隆相应的控件,然后将其摆放至相应的音轨上就行了

      此时有三点值得注意!

      1.我们的BeginTime其实是想让玩家点击的时间,而不是控件生成的时间,假设游戏的屏幕宽度是1000像素,我们想让控件以每秒500像素的速度下落,那么我们就需要提前1000 / 500 = 2秒生成该控件,然后给控件设置一个move的动作(这里也可以给控件设置一个计时器,每帧去调整其Y轴位置,效果一样),让它两秒中后从生成点移动到点击点处即可

      2.对于滑动控件,如果我们需要滑动多个音轨,那么我们可以setWidth延长中间部分图片的长度,并调整其头尾控件的位置即可实现

      3.对于长按控件,在生成的时候需要计算其最终长度,公式如下:控件的下落速度 * (结束点击时间(EndTime) - 开始点击时间(BeginTime)) ,需要setHeight一下,并调整其头尾控件的位置

(8)看看现阶段效果

(四)结语

      至此我们就已经完成了操作序列的制定,以及控件下落的流程了

      明天分享如何判定玩家的操作,以及控件回收,性能优化问题

      感谢阅读,点赞,关注!!!

艺术活动——《喜羊羊和灰太狼》(音游)

一、活动内容:艺术活动——《喜羊羊和灰太狼》(音游)

二、活动目标:

1.能听辨音乐中的长音和停顿,控制好手部动作,跟随音乐玩游戏。

2.能遵守游戏规则,体验游戏的紧张感,享受与同伴两两合作游戏的快乐。

三、活动准备:

1.物质准备:音乐《喜羊羊和灰太狼》

2.资源利用:事先教会一名幼儿与教师协同玩游戏。

四、活动过程:

(一)以故事导入活动,引发幼儿的兴趣。

引导语:有一天,喜羊羊出去玩,走着走着,突然看到灰太狼迎面跑来。喜羊羊吓坏了,不由自主地大叫一声“咩——”。灰太狼被吓了一跳,仔细一看,说:“哦,是喜羊羊啊,我的美味午餐!”说完,灰太狼扑向喜羊羊,喜羊羊转身就跑。一个在前面跑,一个在后面追。喜羊羊到底有没有被灰太狼追上?我们一起来听听音乐。

(二)组织幼儿安静倾听音乐《喜羊羊和灰太狼》。

教师在音乐中长音的地方用手指点数,引导幼儿发现并记忆音乐中灰太狼共追了喜羊羊基础,前三次和第四次的音乐有什么不同。

(三)听音乐扮演喜羊羊和灰太狼。

 1.情节一:喜羊羊和灰太狼出门。启发幼儿自编能表现喜羊羊和灰太狼走路的动作,跟随音乐节奏原地做走路动作。

2.情节二:喜羊羊和灰太狼相遇。两人双手轻轻对拍四下,后双手交叉拍肩做害怕的动作和表情。重复一次。

3.情节三:灰太狼追喜羊羊。灰太狼突然醒悟了,要抓喜羊羊,喜羊羊赶紧跑。扮演灰太狼的幼儿双手掌心向下,随乐轻轻上下摆动;扮演喜羊羊的幼儿双手食指朝上,分别轻顶灰太狼的掌心。听到顿音时,灰太狼赶紧双手握拳,抓住喜羊羊的食指,喜羊羊则要抽出食指躲避,看能否躲过灰太狼拳头的“追捉”。。

(四)音乐游戏“喜羊羊和灰太狼”。

1.请一名幼儿和教师一起完整示范玩音乐游戏。重点提醒幼儿:“情节三”灰太狼和喜羊羊相互追逃的地方长音音乐重复三次,第四次长音音乐最后一拍没有顿音,喜羊羊双手食指保持顶的动作,灰太狼双手五指始终张开,不变成握拳状。

2.和幼儿共同讨论游戏的规则,引导幼儿明确只有紧跟长音音乐后的顿音出现时,灰太狼才能抓,喜羊羊才能逃。

3.讲解游戏玩法,帮助幼儿明确游戏玩法和要求。

4.幼儿两两自由组合,先猜拳决定角色(赢的幼儿可以优先选择角色),再跟随音乐游戏;第二遍互换角色游戏;提醒幼儿倾听音乐,遵守游戏规则,充分体验游戏的乐趣。

以上是关于游戏客户端制作节奏大师Like音游(上)的主要内容,如果未能解决你的问题,请参考以下文章

服务端构架干货:快节奏多人游戏的技术实现

快节奏多人在线游戏网络入门系列教程:实体插值

快节奏多人在线游戏网络入门系列教程:爆头!滞后补偿

游戏音乐制作随谈

MATLAB制作简易版本不要停,八分音符酱 (大概算音游)

MATLAB制作简易版本不要停,八分音符酱 (大概算音游)