Flixel横板游戏制作教程(六)—SoundsandMusic(音效与音乐)

from: http://bbs.9ria.com/thread-77302-1-1.html

演示程序

http://www.adamatomic.com/canabalt/

http://www.flixel.org/mode/

Flixel横板游戏制作教程(六)—SoundsandMusic(音效与音乐)

本教程是接着Flixel横板游戏制作教程(五)—Enemies (加入敌人)来做的。
音乐音效的加入让游戏更生动,快试试吧,下面是教程咯~
先看到 Player 类:

package 
{
        import org.flixel.FlxG;
        import org.flixel.FlxGroup;
        import org.flixel.FlxObject;
        import org.flixel.FlxSprite;
        
        /**
         * ...
         * @author zb
         */
        public class Player extends FlxSprite 
        {
                //***********已有的内容**************//
                
                //跳跃的声音
                [Embed(source = 'media/jump.mp3')]
                protected var jumpSnd:Class;
                //着地的声音
                [Embed(source = 'media/land.mp3')]
                protected var landSnd:Class;
                
                //***********已有的内容**************//
                
                //重写update 方法,用于控制
                public override function update():void
                {
                        //***********已有的内容**************//
                        
                        //找到 这里,然后在下面加上
                        if(FlxG.keys.justPressed('X') && onFloor)
                        {
                                //跳跃的时候,人物的y轴速度是向上的
                                velocity.y = -JUMP_ACCELERATION;
                                
                                //播放跳跃声音
                                //参数1:播放的声音类
                                //参数2:声音大小,默认为1
                                //参数3:是否循环,默认为false
                                FlxG.play(jumpSnd,1.0,false);
                        }
                        
                        //***********已有的内容**************//
                }
                
                //重写这个碰到下方的方法,主要是加一个落地声音
                override public function hitBottom(Contact:FlxObject,Velocity:Number):void 
                {
                        //为什么要 速度大于50呢?
                        //首先是因为,当人物在地面的时候,会不停的检测碰撞
                        //那么hitBottom会不停的检测,如果不加一个速度判断
                        //那么声音会不停的 播放
                        //所以加一个速度值判断 就是为了 让人物在地面的时候(地面时y速度为0)
                        //不会播放落地声音。。
                        if (velocity.y > 50) 
                        {
                                //落地声音
                                FlxG.play(landSnd);
                        }
                        super.hitBottom(Contact, Velocity);
                }
        }
        
}
package 
{
        import org.flixel.FlxG;
        import org.flixel.FlxGroup;
        import org.flixel.FlxObject;
        import org.flixel.FlxState;
        import org.flixel.FlxTileblock;
        import org.flixel.FlxU;
        
        /**
         * ...
         * @author zb
         */
        public class GameState extends FlxState 
        {
                //***********已有的内容*************//
                
                //背景音乐
                [Embed(source = 'media/mode.mp3')]
                protected var bgMusic:Class;
                //找到这个方法
                override public function create():void 
                {
                        //***********已有的内容*************//
                        
                        //添加背景音乐
                        addBackGroundMusic();
                }
                
                //***********已有的内容*************//
                
                private function addBackGroundMusic():void
                {
                        //play 和 playMusic 有什么区别?
                        //区别就是在于 play 方法的 第三个参数:Looped
                        //playMusic 没有这个 Looped ,是因为这个方法是播放循环音乐
                        //相当于 play 方法的 Looped 参数设置为 true,默认为false
                        FlxG.playMusic(bgMusic);
                }
        }
        
}

 下面是Bullet 类:

package 
{
        import org.flixel.FlxG;
        import org.flixel.FlxObject;
        import org.flixel.FlxSprite;
        
        /**
         * ...
         * @author zb
         */
        public class Bullet extends FlxSprite 
        {
                //***********已有的内容************//
                
                //发射子弹的声音
                [Embed(source = 'media/shoot.mp3')]
                protected var shootSnd:Class;
                //子弹碰到障碍物的声音
                [Embed(source = 'media/hit.mp3')]
                protected var hitSnd:Class;
                
                //***********已有的内容************//
                
                //找到这个方法
                public function shoot(sPosX:Number,sPosY:Number,velX:Number,velY:Number):void 
                {
                        //***********已有的内容************//
                        
                        //播放发射时的声音
                        FlxG.play(shootSnd);
                }
                
                //***********已有的内容************//
                
                //找到这个方法
                override public function hurt(Damage:Number):void 
                {
                        //***********已有的内容************//
                        
                        //播放碰到障碍物时爆炸的声音
                        FlxG.play(hitSnd);
                }
        }
        
}

 接着是 Enemy 类:

package 
{
        import org.flixel.FlxEmitter;
        import org.flixel.FlxG;
        import org.flixel.FlxObject;
        import org.flixel.FlxSprite;
        
        /**
         * ...
         * @author zb
         */
        public class Enemy extends FlxSprite 
        {
                //***********已有的内容**************//
                
                //敌人爆炸的声音
                [Embed(source = 'media/asplode.mp3')]
                protected var asplodeSnd:Class;
                
                //***********已有的内容**************//
                
                //找到这个方法
                override public function kill():void 
                {
                        //***********已有的内容**************//
                        
                        //播放敌人爆炸的声音
                        FlxG.play(asplodeSnd);
                }
                
                //***********已有的内容**************//
        }
        
}

 最后是 GameState 类:

相关推荐