Flixel横板游戏制作教程(十一)—JetPack(飞行背包)

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

 

演示程序

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

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

Flixel横板游戏制作教程(十一)—JetPack(飞行背包)

Flixel横板游戏制作教程(十一)—JetPack(飞行背包)
本教程是接着Flixel横板游戏制作教程(十)—Pickups(拾取道具)来做的。
给角色带一个飞行器,是不是感觉很酷?那我们赶快开始吧~
这里 按 SPACE(空白键)为使用飞行背包。
看到 Player 类:

package 
{
        import org.flixel.FlxEmitter;
        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/jet.png')]
                protected var jetImg:Class;
                
                //飞行背包的音效
                [Embed(source = 'media/jetpack.mp3')]
                protected var sndJetPack:Class;
                
                //飞行背包 粒子发射器
                private var jetPack:FlxEmitter;
                
                //飞行背包的 气体 消失的时间,变量,计时用,-1为不计时
                private var jetPackCountDown:Number = -1;
                
                //飞行背包的气体消失时间的初始值,设置为0.5秒
                private const COUNT_DOWN:Number = 0.5;
                
                //初始化给个初始坐标,当然可以不用参数,不过super的时候一定要加上
                public function Player(startX:Number=100,startY:Number=50):void 
                {
                        //**********已有的内容************//
                        
                        //添加飞行背包
                        addJetPack();
                }
                
                //重写update 方法,用于控制
                public override function update():void
                {
                        //**********已有的内容************//
                                
                        //按住 Space 键 开始飞行
                        if (FlxG.keys.pressed('SPACE')) 
                        {
                                //播放喷气时的音效
                                FlxG.play(sndJetPack);
                                
                                //on 这个属性,是指 粒子发射器 是否正在发射粒子。
                                //这里判断 当 没有发射粒子时
                                if (!jetPack.on) 
                                {
                                        //粒子开始发射,
                                        //参数1:设置false,这样粒子就不会 一次性全部 发射完,而是一个接一个发射,并且会无限发射
                                        //参数2:设置0.02,每个粒子的发射间隔为 0.02秒
                                        jetPack.start(false, 0.02);
                                }
                                
                                //将player 的 y 轴 加速度 设置为 这个值,方向向上
                                this.acceleration.y = -JUMP_ACCELERATION;
                                
                                //设置 jetPack 的 x 和 y 坐标,
                                //就是让 发射器 实时跟随者 Player
                                jetPack.x = this.x + this.width * 0.5;
                                jetPack.y = this.y + this.height;
                                
                                //设置为 -1
                                jetPackCountDown = -1;
                        }
                        
                        //当 放开 space 按键时
                        if (FlxG.keys.justReleased('SPACE')) 
                        {
                                //计数器 设置这个值,也就是0.5秒,即开始计时
                                jetPackCountDown = COUNT_DOWN;
                                
                                //同时Player 的y轴加速度变为 重力值
                                this.acceleration.y = GRAVITY_ACCELERATION;
                        }
                        
                        //当计数器 不为 -1时,也就是说 开始计时
                        if (jetPackCountDown != -1) 
                        {
                                //计时器开始计时
                                //每次 update 都会减去 一个 值
                                //elapsed 就是 每次 update 经过的时间
                                jetPackCountDown -= FlxG.elapsed;
                                
                                //当 计时器 减少到 0以下时
                                if (jetPackCountDown<=0) 
                                {
                                        //计时器 设置为 -1
                                        jetPackCountDown = -1;
                                        //同时将 飞行背包 kill 掉,这样气体就会消失
                                        jetPack.kill();
                                }
                        }
                        
                        /*** 切记 ***/
                        //这个语句一定要加上去,只要重写了update,就一定要调用 super的update
                        //否则不会刷新动画。。也不会响应你在这里所设置的控制
                        super.update();
                }
                
                //**********已有的内容************//
                
                private function addJetPack():void
                {
                        jetPack = new FlxEmitter();
                        //创建粒子
                        //参数1:粒子素材
                        //参数2:粒子的最大数量
                        jetPack.createSprites(jetImg, 15);
                        //将粒子发射时的 x 和 y 轴速度 设置为0,让喷射的气体位置不变
                        jetPack.setXSpeed(0, 0);
                        jetPack.setYSpeed(0, 0);
                        //设置粒子不会旋转
                        jetPack.setRotation(0, 0);
                        //设置粒子不受重力影响
                        jetPack.gravity = 0;
                        //记得添加到state 中。。
                        FlxG.state.add(jetPack);
                }
        }
        
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值