1、18 模拟钢琴模拟钢琴 程序设计基础 2 home back first prev next last 本节目标本节目标 这节课我们即将学习这节课我们即将学习 模拟钢琴模拟钢琴 乐谱播放乐谱播放 3 home back first prev next last 模拟钢琴模拟钢琴 该程序可以模拟钢琴,并实现乐曲自动弹奏该程序可以模拟钢琴,并实现乐曲自动弹奏 右边是程序界面右边是程序界面 4 home back first prev next last 模拟钢琴模拟钢琴 程序功能程序功能 用鼠标点击琴键,或按下键盘上的用鼠标点击琴键,或按下键盘上的 Q W E R U I O P 等按键,可以弹奏
2、钢琴等按键,可以弹奏钢琴 点击舞台左侧的歌曲名称,程序就会播放选中点击舞台左侧的歌曲名称,程序就会播放选中 的乐曲的乐曲 注意,这里播放乐曲的方式和以前游戏中播放音乐注意,这里播放乐曲的方式和以前游戏中播放音乐 的方式是不同的。以前是播放事先录制好的音乐文的方式是不同的。以前是播放事先录制好的音乐文 件,这里是直接播放音符,一个音符接一个音符,件,这里是直接播放音符,一个音符接一个音符, 就完成了音乐的播放,你可以认为是计算机在自动就完成了音乐的播放,你可以认为是计算机在自动 弹奏乐曲弹奏乐曲 5 home back first prev next last 模拟钢琴模拟钢琴 程序的舞台比较简
3、单,就是一个绿色的背景。程序的舞台比较简单,就是一个绿色的背景。 程序的角色比较多,但是可以分成几大类:程序的角色比较多,但是可以分成几大类: 琴键类角色(琴键类角色(Sprite2 - Sprite13,Sprite27),非),非 常类似,我们只看其中一个,如常类似,我们只看其中一个,如Sprite2的代码的代码 信息提示类角色(信息提示类角色(Sprite14- Sprite26、Sprite28、 Sprite29、Sprite31),只负责在屏幕上显示一定),只负责在屏幕上显示一定 的信息,没有代码,是静态不动的的信息,没有代码,是静态不动的 歌曲名按钮角色(歌曲名按钮角色(Happ
4、y Birthday、Row Row Row、Sprite30、When the Saints) 6 home back first prev next last 模拟钢琴模拟钢琴 琴键类角色琴键类角色Sprite2的代码的代码 第一个脚本监测按键“第一个脚本监测按键“2”如果被按下,则广播事件如果被按下,则广播事件C# 第二个脚本是第二个脚本是C#的事件处理程序,负责切换琴键的造的事件处理程序,负责切换琴键的造 型,实现琴键被按下的效果并且弹奏对应的音符。乐器型,实现琴键被按下的效果并且弹奏对应的音符。乐器 被设定为被设定为1-钢琴。弹奏长度被设定为钢琴。弹奏长度被设定为0.5拍。如果设定乐
5、拍。如果设定乐 器为指定变量,则可以实现统一改变乐器的功能器为指定变量,则可以实现统一改变乐器的功能 第三个脚本实际上也可以简化为“当第三个脚本实际上也可以简化为“当Sprite2被点击,广被点击,广 播播 C#”,这样更简单,这样更简单 7 home back first prev next last 模拟钢琴模拟钢琴 歌曲名按钮角色代码歌曲名按钮角色代码 右边是播放右边是播放Happy Birthday乐曲的代码片段。只是当用乐曲的代码片段。只是当用 户点击歌曲名称时,按照曲谱的要求,顺序播放每个音户点击歌曲名称时,按照曲谱的要求,顺序播放每个音 符指定的时间罢了。播放的方式是通过广播事件
6、来完成符指定的时间罢了。播放的方式是通过广播事件来完成 的,因此播放音符时,对应钢琴按键会显示被按下的效的,因此播放音符时,对应钢琴按键会显示被按下的效 果,就像钢琴在自动弹奏一样了果,就像钢琴在自动弹奏一样了 8 home back first prev next last 模拟钢琴模拟钢琴 思考:思考: 怎样可以改变乐曲播放的速度?怎样可以改变乐曲播放的速度? 9 home back first prev next last 10 home back first prev next last 11 home back first prev next last 总结总结 这节课我们学习了这节课我们学习了 模拟钢琴模拟钢琴 乐谱播放乐谱播放