• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH AS 编程>AS基础篇>FLASH类>文章内容
  • 键盘连招的组合键函数
  • 来源:flashas.net 作者:吾系衰人 2007-04-21 【

因为工作需要写了个pk游戏中比较常用到的组合键盘的连招类

给大家共享下:请新建一个名为key_func的as文件拷贝下面的脚本;
class key_func extends MovieClip {
 var prop;
 var oldVal;
 var newVal;
 var mid_val;
 var m_obj;
//arr:Array (连招组合的键盘数字),( OBJ:Object对象1 ,OBJ2:Object对象2。。注意函数调用函数的这两个对象最好都是唯一的)
//tmp:String(一个临时争听mc函数调用时最好也是唯一的),func_:Function(成功完成连招时调用的函数, time:Number招式调用的按键间隔)

 function key_func(arr:Array, OBJ:Object, OBJ2:Object, tmp:MovieClip, func_:Function, time:Number) {
  var OBJ = new Object();
  var OBJ2 = new Object();
  OBJ2.key;
  OBJ2.what = 0;
  OBJ.num = 0;
  OBJ.num2 = 0;
  OBJ.onKeyDown = function() {
   if (this.once == undefined) {
    this.once = 1;
    if (OBJ2.blo == undefined) {
     if (Key.getCode() == arr[this.num]) {
      this.num++;
     }
    } else if (Key.getCode() == arr[this.num] && OBJ2.blo !== undefined) {
     this.num++;
    } else if (Key.getCode() != arr[this.num]) {
     this.num = 0;
     delete OBJ2.blo;
    }
    OBJ2.key = getTimer();
    if (this.num>arr.length) {
     this.num = 0;
    }
   }
  };
  var cnt = 0;
  tmp.onEnterFrame = function() {
   cnt++;
   if (cnt>2) {
    delete OBJ.once;
    cnt = 0;
   }
  };
  OBJ.onKeyUp = function() {
   delete this.once;
  };
  Key.addListener(OBJ);
  watch(OBJ2, OBJ2.key, "key", funcForObj, 0);
  function funcForObj() {
   if (OBJ.num>1) {
    if (arguments[2]-arguments[1]>time || arguments[2]-arguments[1]<0) {
     OBJ2.blo = true;
     OBJ.num = 1;
     OBJ2.what = 0;
    } else if (arguments[2]-arguments[1]<=time) {
     if (Key.getCode() == arr[OBJ2.what+1]) {
      OBJ2.what++;
     }
     if (OBJ2.what == arr.length-1) {
      func_(prop, oldVal, newVal, mid_val);
      OBJ.num = 0;
      OBJ2.what = 0;
     }
    }
   }
  }
 }
 function watch(Obj:Object, val, string:String, func:Function, mid_val) {
  if (Obj.once_run == undefined) {
   Obj.once_run = 1;
   if (Obj == undefined) {
    var Obj = {};
    Obj.val;
   }
   if (mid_val == undefined) {
    mid_val = 0;
   }
   var Watcher:Function = function (prop, oldVal, newVal, mid_val) {
    func(prop, oldVal, newVal, mid_val);
    if (newVal == "unwatch") {
     m_obj.unwatch();
    }
    return newVal;
   };
   Obj.watch(string, Watcher, mid_val);
  }
 }
}


在fla文件的调用方法如下:

arr = [37, 40, 39];
function func() {
 //左-下-右
 trace("第一式");
}
arr2 = [37, 38];
function func_2() {
 //左-上
 trace("第二式");
}
this.createEmptyMovieClip("mc1", getNextHighestDepth());
this.createEmptyMovieClip("mc2", getNextHighestDepth());
var key_func1 = new key_func(arr2, ob1, ob2, mc2, func, 300);
var key_func2 = new key_func(arr, ob3, ob4, mc1, func_2, 200);



上一篇:as中的类   下一篇:使用Transitions类制作动画实例
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
推荐内容

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)