日历

« 2008-09-05  
 123456
78910111213
14151617181920
21222324252627
282930    

统计信息

  • 访问量: 188
  • 日志数: 2
  • flash数: 1
  • 建立时间: 2007-03-03
  • 更新时间: 2007-09-25

RSS订阅

我的最新日志

  • 一个简单的Flash打字游戏

    2007-9-25

    代码:

    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    打字游戏 ——V1.0
    日期:2007-9-24
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    定义变量
    ----------------------------------------------------------------------------------------------
    */
    fscommand("fullscreen", true);
    var Bring_num:Number = 0;
    var Bring_maxnum:Number = 20;
    var Grade_num:Number = 1;
    var Grade_bring:Number = 100;
    var Move_speed:Number = 2;
    var Bring_speed:Number = 0;
    var Press_num:Number = 0;
    var Right_num:Number = 0;
    var Loss_num:Number = 0;
    var Grade_boolean:Boolean = false;
    var Interval_num:Number = 0;
    var Listener:Object = new Object();
    var Addsound:Sound = new Sound();
    var Addblast_mc:Object = new Object();
    var Time_m:Number = 0;
    var Time_s:Number = 1;
    var Hide_id:Number;
    /*
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Bring_word函数功能:随机产生字符
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    */
    function Bring_word() {
     var color_array:Array = new Array(0xffffff, 0x9B4A8B, 0xE0C0DB, 0xAC285E, 0x235CB1, 0x379D37, 0xB1A323);
     var txtstyle:TextFormat = new TextFormat();
     txtstyle.bold = true;
     txtstyle.font = "宋体";
     txtstyle.size = 20;
     txtstyle.color = color_array[random(7)];
     _root.Bring_num++;
     if (_root.Bring_num>=Bring_maxnum) {
      _root.Bring_num = 0;
     }
     switch (random(2)) {
     case 0 :
      txt = random(26)+97;
      break;
     case 1 :
      txt = random(10)+48;
      break;
     }
     _root.createTextField("txt"+_root.Bring_num, _root.Bring_num, random(Stage.width), -(random(200)+10), 25, 25);
     this["txt"+_root.Bring_num].text = chr(txt);
     this["txt"+_root.Bring_num].setTextFormat(txtstyle);
    }
    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Interval_event();初始化时产生的字符个数
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    */
    function Interval_event() {
     Bring_word();
     Interval_num++;
     if (Interval_num>=3) {
      clearInterval(Interval_id);
     }
    }
    var Interval_id:Number = setInterval(Interval_event, 1000);
    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    cyc_event下落函数
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    */
    function cyc_event() {
     function _event() {
      for (var i = 0; i<=Bring_maxnum; i++) {
       var n:Number = random(2) ? -Math.random()*9 : Math.random()*9;
       _root["txt"+i]._y += Move_speed;
       _root["txt"+i]._x += n;
       if (_root["txt"+i]._y>Stage.height) {
        _root["txt"+i].removeTextField();
        Bring_word();
        Loss_num++;
        loss_txt.text = Loss_num;
       }
      }
     }
     var cyc_id:Number = setInterval(_event, 50);
    }
    cyc_event();
    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    监听键盘
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    */
    Key.addListener(Listener);
    Listener.onKeyDown = function() {
     Press_num++;
     //trace(Press_num);
     if (Grade_boolean) {
      Grade_num++;
      Grade_boolean = false;
      grade_txt.text = "第"+Grade_num+"关";
      Move_speed += 2;
      for (var i = 0; i<3; i++) {
       Bring_word();
      }
     }
     //trace("Press_num="+Press_num);                                                                     
     for (i=0; i<=Bring_maxnum; i++) {
      if (_root["txt"+i].text == chr(Key.getAscii())) {
       Right_num++;
       Addsound.attachSound("Sound_mc");
       Addsound.start();
       //_root.attachMovie("Blast_mc", "Addblast_mc", _root.getNextHighestDepth(), {_x:_root["txt"+i]._x, _y:_root["txt"+i]._y});
       Blast_mc.play();
       Blast_mc._x = _root["txt"+i]._x;
       Blast_mc._y = _root["txt"+i]._y;
       _root["txt"+i].removeTextField();
       Bring_word();
       if (Right_num>=Grade_bring and Right_num%Grade_bring == 0) {
        Grade_boolean = true;
       } else {
        Grade_boolean = false;
       }
      }
     }
     right_txt.text = String(Right_num);
     if (Press_num-Right_num>0) {
      wrong_txt.text = String(Press_num-Right_num);
     } else {
      Press_num += Math.abs(Press_num-Right_num);
     }
    };
    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
    时间函数
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
    */
    function Time_event() {
     Time_s++;
     if (Time_s/60>1) {
      Time_m++;
      Time_s = 1;
     }
     time_txt.text = Time_m+":"+Time_s%60;
    }
    setInterval(Time_event, 1000);
    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    简介函数
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    */
    var newmenu:ContextMenu = new ContextMenu();
    newmenu.hideBuiltInItems();
    this.menu = newmenu;
    newmenu.customItems.push(new ContextMenuItem("作者:Edward.yang", by_event));
    newmenu.customItems.push(new ContextMenuItem("QQ:77839683", getqq));
    newmenu.customItems.push(new ContextMenuItem("退出", exit_event, true));
    function exit_event() {
     fscommand("quit", "");
    }
    function by_event() {
     Hide_id = setInterval(hide_by, 5000);
     by_mc.gotoAndStop(2);
     by_mc._alpha = 0;
     by_mc.onEnterFrame = function() {
      this._alpha += (100-this._alpha)/8;
      this._x += (Stage.width/2-this._x)/8;
      this._y += (Stage.height/2-this._y)/8;
      //trace(this._alpha);
      if (this._alpha>=100) {
       delete by_mc.onEnterFrame;
      }
     };
    }
    function hide_by() {
     by_mc.onEnterFrame = function() {
      this._alpha -= 8;
      //trace(this._alpha);
      if (this._alpha<=0) {
       this.gotoAndStop(1);
       clearInterval(Hide_id);
       delete by_mc.onEnterFrame;
      }
     };
    }
    function getqq() {
     getURL("tencent://message/?uin=77839683");
    }

    源文件下载:http://www.grandbuild.com.cn/edward/game.rar

     


    Flash: 打字游戏

  • AS下雨效果

    2007-9-18

    //=================MC类自定义方法====================
    //——————宽高矩形法,根据初始点坐标和宽与高确定矩形。x,y为初始点坐标,kuan和gao为矩形的宽和高。
    MovieClip.prototype.kuangaojuxing = function(x, y, kuan, gao, bangzhi, yanse, toumingdu) {
           this.lineStyle(bangzhi, yanse, toumingdu);
           this.moveTo(x, y);
           this.lineTo(x+kuan, y);
           this.lineTo(x+kuan, y+gao);
           this.lineTo(x, y+gao);
           this.lineTo(x, y);
    };
    //——————MC定位方法
    MovieClip.prototype.dingwei = function(x, y) {
           this._x = x;
           this._y = y;
    };
    //==================创建下雨动画=====================
    //定义下雨动画函数,相关参数请参考下面的注释
    /*
    x_fc:下雨动画的X坐标
    y_fc:下雨动画的Y坐标
    yanse_fc:雨滴颜色
    toumingdu_fc:雨滴透明度
    yudikuan_fc:雨滴的宽
    yudigao_fc:雨滴的高
    qingxie_fc:雨滴的倾斜度
    mijidu_fc:雨滴的密集度
    pinlu_fc:下雨画面更换的频率
    kuan_fc:下雨画面宽
    gao_fc:下雨画面高(它和上面的参数一起控制下雨范围)
    */
    function xiayudonghua(x_fc, y_fc, yanse_fc, toumingdu_fc, yudikuan_fc, yudigao_fc, qingxie_fc, mijidu_fc, pinlu_fc, kuan_fc, gao_fc) {
           //创建下雨动画MC
           createEmptyMovieClip("xiayu_mc", 10000);
           //定位下雨动画MC
           xiayu_mc.dingwei(x_fc, y_fc);
           //在下雨动画里创建单个雨滴MC
           xiayu_mc.createEmptyMovieClip("yudi_mc", 10000);
           with (xiayu_mc) {
                  //宽高矩形法绘制单个雨滴MC
                  yudi_mc.beginFill(yanse_fc, toumingdu_fc);
                  yudi_mc.kuangaojuxing(0, 0, yudikuan_fc, yudigao_fc, 0, 0x000000, 0);
                  yudi_mc.endFill();
                  //定义雨滴的倾斜度
                  yudi_mc._rotation = qingxie_fc;
                  //连续调用“jingtaihuamian”函数,形成下雨动画
                  var xiayu_si = setInterval(jingtaihuamian, pinlu_fc, mijidu_fc, kuan_fc, gao_fc);
           }
    }
    //定义下雨动画的静态画面函数
    function jingtaihuamian(mijidu_fc, kuan_fc, gao_fc) {
           //随机复制单个雨滴MC,形成单贞下雨画面
           for (var i = 0; i<mijidu_fc; i++) {
                  xiayu_mc.yudi_mc.duplicateMovieClip("yudi_mc"+i, i);
                  xiayu_mc.yudi_mc.dingwei(random(kuan_fc), random(gao_fc));
           }
    }
    //==============按钮控制下雨动画===============
    kaishi_btn.onRelease = function() {
           //在需要下雨的贞调用这个函数就可以下雨了!
           xiayudonghua(0, 0, 0xffffff, 50, 2, 30, 30, 100, 10, 550, 400);
    };
    tingzhi_btn.onRelease = function() {
           //天晴的时候就调用这个函数
           xiayu_mc.removeMovieClip();
    };

     


    ★只要把上面的代码复制到第一贞,然后再建立一个“kaishi_btn”和"tingzhi_btn”按钮就可以欣赏效果了。我把代码写到函数里,是为了方便在动画中使用,在需要下雨的地方,只要调用"xiayudonghua"这个函数就可以了,而在天晴的时候,写一句xiayu_mc.removeMovieClip()就OK了,怎么样?挺好用的吧
    ★下面大致讲一下原理。

     

     


    ★别一看是纯AS写出来的,就貌似很牛B了,吓得你只敢用不敢看了,其实它的原理很简单
    1,先创建一个空的xiayu_mc,所有的雨滴都将放到这个MC里,这是为了便于删除下雨效果。
    2,然后在这个MC里调用自己定义绘图方法绘制一个细条型的矩形,这个矩形就是原始的雨滴模型yudi_mc。
    3,根据这个雨滴模型复制大量相同的雨滴,并使他们随机分布在指定的范围内,这样就形成了一个下雨的画面,这个画面就类似那些动画设计师在PS中绘制的下雨图片。这个过程在jingtaihuamian函数中完成。
    4,最后就是通过setInterval不断调用jingtaihuamian函数,由于jingtaihuamian中使用了随机函数,每次调用jingtaihuamian生成的下雨画面都不一样,这样连续起来就形成比较逼真的下雨效果了。
    ★怎么样,很简单吧
    ★但如果你看懂了,先别得意哦,我们要学会发散思维,如果我们把xiayu_mc设置成某个MC的遮罩的话,会弄出什么效果呢?我首先想到的就是另一个非常常见的效果:“波光粼粼”。
    下面就是我用这个原理做的效果,有兴趣的朋友可以去看看,相信聪明的你们自己也可以做出来了吧:)
    (来源于http://www.huoshan.org/#zizhan=wenjiv1=wenzhang_2
     

Open Toolbar