闪网工作室吧 关注:6贴子:71

Flash小应用系列之全民打飞机

只看楼主收藏回复

1L别抢,给度娘


IP属地:四川1楼2014-06-20 17:17回复
    从本贴开始,将会有一系列Flash小应用在线更新同步开发,如有疑问请跟贴~


    IP属地:四川2楼2014-06-20 17:18
    回复
      2025-12-22 11:17:49
      广告
      不感兴趣
      开通SVIP免广告


      IP属地:四川3楼2014-06-20 17:20
      回复
        在开发之前先规划一下具体的内容:
        1、采用第一人称射击方式,并通过过关来加深游戏的难度系数
        2、战机可通过射击敌人的数量来进行升级
        3、可通过场景中的道具来加强子弹的射击威力
        4、配上酷炫的音乐
        5、请抱紧我~


        IP属地:四川4楼2014-06-20 17:24
        回复
          预计开发周期1.5天~ 请注意此贴的最新动态(鉴于明日LZ又要是在身,可能从明晚开始创作)


          IP属地:四川5楼2014-06-20 17:27
          回复
            Flash小应用些列的最终解释权归闪网工作室


            IP属地:四川6楼2014-06-20 17:27
            回复
              插楼,期待楼主更新


              IP属地:四川7楼2014-06-20 17:29
              回复
                今天做这个的时间不多,抽空弄了一下,搞出来的东西并不多。下面就说一下,今天的成果~~
                1、主文档Main类充当一个入口的同时,也可当做游戏最底层容器(整个场景都放在里面)
                2、MyPlain为第一人称飞机,此类采用单实例(好出不多说),可以通过改变plainType参数来改变飞机形状。
                3、MyPalin的操控方式是通过鼠标点击事件(MouseEvent.CLICK),定位飞机的初始位置和结束位置坐标,然后通过TweenLite类缓动飞机的运动过程。
                4、菜单界面初步制作。
                下面给出部分效果图和部分代码(所有代码请到闪网工作室官网下载)


                IP属地:四川8楼2014-06-21 21:45
                回复
                  2025-12-22 11:11:49
                  广告
                  不感兴趣
                  开通SVIP免广告
                  Main类
                  private var _startMenu:StartMenu;
                  private var _gameScene:GameScene;
                  private function initView():void{
                  _startMenu = StartMenu.instance;
                  this.addChild(_startMenu);
                  _gameScene = GameScene.instance;
                  this.addChild(_gameScene);
                  _gameScene.visible = false;
                  _gameScene.mainUI = this;
                  this.addEventListener(MouseEvent.CLICK, onClick);
                  }
                  private var _edx:Number;
                  private var _edy:Number;
                  private function onClick(e:MouseEvent):void{
                  if(MyPlain.instance.parent == null){
                  return;
                  }
                  _edx = e.stageX;
                  _edy = e.stageY;
                  var s:Number = (_edx - MyPlain.instance.x) * (_edx - MyPlain.instance.x) + (_edy - MyPlain.instance.y) * (_edy - MyPlain.instance.y)
                  var ss:Number = Math.sqrt(s);
                  TweenLite.to(MyPlain.instance, ss / 300, {x:_edx, y:_edy});
                  }
                  其中StartMenu为菜单项,GameScene为游戏界面场景,侦听函数onClick用来处理飞机的运动。


                  IP属地:四川9楼2014-06-21 21:48
                  回复
                    MyPlain类
                    private var _baseSp:Sprite;
                    public function set plainType(type:int):void{
                    switch(type){
                    case 1:
                    if(_baseSp.numChildren > 0){
                    _baseSp.removeChildAt(0);
                    }
                    var p:MyPlainOne = new MyPlainOne();
                    p.scaleX = p.scaleY = 0.15;
                    _baseSp.addChild(p);
                    break;
                    }
                    }
                    这部分主要是用于改变飞机形状的(可当做飞机形状或者等级的扩展,代码只是给了一个简单接口,目前没有考虑优化,等弄完了一起优化)


                    IP属地:四川10楼2014-06-21 21:57
                    回复



                      IP属地:四川13楼2014-06-21 22:01
                      回复
                        明日在更


                        IP属地:四川14楼2014-06-21 22:02
                        回复
                          子弹发射和子弹击中坦克,积分面板的变化,以及GameOver和重新开始的几个方面的处理。 。 。


                          IP属地:四川15楼2014-06-22 21:20
                          回复
                            MyBullet类的部分代码:
                            private function onFrame(e:Event):void{
                            this.x += mx;
                            this.y += my;
                            var arr:Array = DataManager.instance.enemys;
                            for(var i:int = 0; i < arr.length; i++){
                            if(this.hitTestObject(arr[i])){
                            toRemove();
                            if(!GameScene.instance.mainUI.isGameOver && arr[i] as EnemyPlain){
                            (arr[i] as EnemyPlain).toRemove();
                            ScorePanel.instance.changeData(1, 0);
                            }
                            }
                            }
                            if(!isLegal()){
                            toRemove();
                            }
                            }
                            private function toRemove():void{
                            this.removeEventListener(Event.ENTER_FRAME, onFrame);
                            this.parent.removeChild(this);
                            }
                            private function isLegal():Boolean{
                            if(this.x > 610 || this.y < -20 || this.x < -10 || this.y > 720){
                            return false;
                            }
                            return true;
                            }
                            这部分代码主要用于处理子弹和敌机的碰撞检测,以及子弹的合法运动


                            IP属地:四川17楼2014-06-22 21:40
                            回复
                              2025-12-22 11:05:49
                              广告
                              不感兴趣
                              开通SVIP免广告
                              GameOverPanel类部分代码:
                              private function initView():void{
                              var tf:TextFormat = new TextFormat();
                              tf.size = 30;
                              tf.align = "center";
                              tf.bold = true;
                              tf.color = 0xff0000;
                              var txt:TextField = new TextField();
                              txt.defaultTextFormat = tf;
                              txt.text = "Game Over!";
                              txt.width = 600;
                              txt.height = 50;
                              txt.mouseEnabled = false;
                              this.addChild(txt);
                              tf.size = 16;
                              var t:TextField = new TextField();
                              t.defaultTextFormat = tf;
                              t.width = 80;
                              t.height = 25;
                              t.text = "重新开始";
                              t.mouseEnabled = false;
                              _restart = new Sprite();
                              _restart.x = 260;
                              _restart.y = 50;
                              _restart.addChild(t);
                              _restart.addEventListener(MouseEvent.CLICK, onClick);
                              _restart.buttonMode = true
                              this.addChild(_restart);
                              }
                              这个类很简单,就是简单的界面处理


                              IP属地:四川18楼2014-06-22 21:41
                              回复