日历

« 2008-07-07  
  12345
6789101112
13141516171819
20212223242526
2728293031  

统计信息

  • 访问量: 795
  • 日志数: 11
  • flash数: 1
  • 建立时间: 2007-02-02
  • 更新时间: 2007-03-30

RSS订阅

我的最新日志

  • 使用JavaScriptProxy实行JavaScript 与 Flash 间通信

    2007-3-30

    Javascrīpt 与 Flash 整合工具包

    - 关于本项目
    - 安装
    - 使用
    - 系统要求
    - 已知问题

    *********
    关于本项目
    *********
    使用此 Javascrīpt 与 Flash 整合工具包, Javascrīpt能够调用Actionscrīpt函数(反之亦可),Flash和Html开发者能够借此进行更好的开发。
    可以在两种环境下相互通信的主要数据类型包括:
    - objects
    - arrays
    - strings
    - numbers
    - dates
    - booleans
    - nulls
    - undefined
    另外,此 Javascrīpt 与 Flash 整合工具包 能够正常工作于所有主要的浏览器与平台之上(详细内容请参见后面的“系统要求”)。

    在以下位置可以找到相关的最新信息和最新版本:
           http://www.macromedia.com/go/flashjavascrīpt

    本项目由Macromedia公司的 Christian Cantrell 和 Mike Chambers 开发编写。

    ******
    安装
    ******
    安装  Javascrīpt 与 Flash 整合工具包 非常简易。
    只需要将文件 JavascrīptFlashGateway.js 和JavascrīptFlashGateway.swf 从 installation 文件夹复制到网站目录下即可。
    放在哪里都可以,但建议将它放在多个项目均可使用的位置。
    此工具包Flash方部分的安装要求将 source/flash/actionscrīpt 下的库文件复制到您机器上的 Flash 或者 Flex 的类路径下(译者注:比如D:\Macromedia\Flash MX 2004\zh_cn\First Run\Classes\):
           com/macromedia/javascrīpt/JavascrīptProxy.as
           com/macromedia/javascrīpt/JavascrīptSerializer.as
    复制文件时请确保维持以上目录结构不变。

    ****
    使用
    ****

    The Javascrīpt and Flash Integration Kit是MM的Mike ChambersChristian Cantrell开 发的一套用于Javascrīpt和Flash通讯的通用接口程序。通过这套接口,两种语言的大部分数据类型能够被相互支持。之前JS与Flash通讯的 方法是通过fsCommand(),这一套程序用到了flash中的LocalConnection对象,支持主流的浏览器平台。

    安装和使用方法在配套的文档中已经说得比较清楚了,我这里只是提一些要点。安装文件中JavascrīptFlashGateway.swf就是这套接口能够正常运作的幕后功臣,其作用就是发送基于LocalConnection对象的指令来操作目标Flash。

    看看使用这套接口的基本代码,在html页头部加入:

    <scrīpt type="text/javascrīpt" src="/path/to/JavascrīptFlashGateway.js"></scrīpt>

    生成一个id值,建立提供接口服务的FlashProxy对象:

    var uid = new Date().getTime();
     
    var flashProxy = new FlashProxy(uid, '/path/to/JavascrīptFlashGateway.swf');

    在页面中用FlashTag对象代替传统的<object>或<embed>来插入Flash文件:

    <scrīpt type="text/javascrīpt">

    var tag = new FlashTag('/path/to/flashContent.swf', 300, 300); // last two arguments are height and width

    tag.setFlashvars('lcId='+uid);

    tag.write(document);

    </scrīpt>

    uid用来配对LocalConnction对象:分别为FlashProxy提供id参数和作为主Flash文件传入的lcId参数。
    在JS中要调用Flash中的方法,使用flashProxy对象的call()方法:

    flashProxy.call('myActionscrīptFunction', 'my string', 123, true, new Date(), null);

    该方法在页面上插入JavascrīptFlashGateway.swf文件,并且传入相应的参数。然后这个文件则通过 LocalConnection对象发送指令到连接的Flash文件中。每次调用这个方法,JavascrīptFlashGateway.swf都会重 新载入一次(通过改变div的innerHTML)。
    主Flash文件还需要建立一个JavascrīptProxy对象来响应JS的调用(其实也就是初始化一个对应的LocalConnection对象):

    var proxy:JavascrīptProxy = new JavascrīptProxy(_root.lcId, this);

    Flash中调用JS比较简单,其实本质上就是用:

    getURL("javascrīpt:javascrīptMethodName()");

    当然还是用JavascrīptProxy类提供的方法来得比较professional一点:

    import com.macromedia.javascrīpt.JavascrīptProxy;
     
    var proxy:JavascrīptProxy = new JavascrīptProxy();
     
    proxy.call("javascrīptMethodName", "arg1", new Object());
     
    // or
     
    proxy.javascrīptMethodName("arg1", new Object());

    至于两种语言的对象相互转换则分别有FlashSerializer类和JavascrīptSerializer类来做序列化的工作。
    总而言之,这一套接口还是LocalConnection的应用,和之前的整合了浏览器功能的Flash导航有异曲同工之妙。这一类型的应用基本上都是通过重载一个Flash文件(用页面刷新或用innerHTML内部刷新)来发送指令更新主Flash文件。



    ******
    系统要求
    ******
    此Javascrīpt 与 Flash 整合工具包要求 6r65 以上版本的Flash播放器,并在以下浏览器中测试通过:
    Windows IE 6.0
    Windows Firefox 1.0
    Windows Opera 8.0
    Macintosh Opera 8.0
    Macintosh Firefox 1.0
    Safari 1.2.4 and 2.0
    Linux Firefox 1.1

    ******
    已知问题
    ******
    1.如非被明确的定义为 undefined,Javascrīpt 中的未定义对象属性将不能被连载并发给Flash。如果该变量未经声明,则将被清除。
    2.在调试工具环境下,Javascrīpt和Flash的通讯会很缓慢,但是在其他平台和浏览器包括独立播放器下,其速度不会减缓。
    3.不能传递循环中的对象或数组。Javascrīpt和Actionscrīpt下的循环引用都可能引起死循环。换句话说,如果对象属性是指向其自身的一个引用,连载的代码将拼命地无限循环下去。

    此产品(包含软件)由Macromedia有限公司出品。(http://www.macromedia.com)
  • FLEX中一个简单的读RSS的例子

    2007-3-19

    根据官方的帮助文件中带有的一个例子改写.

    主程序:

    study.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:cust="comp.*" fontSize="12" width="300" height="300" creationComplete="myxml.send()" layout="absolute">
    <mx:HTTPService id="myxml" url="{myUrl}" useProxy="false"/>
    <mx:scrīpt>
     <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.controls.Alert;
      [Bindable]
      public var myUrl:String = "src/index.xml";
      private function changeGridEvent(event:Event):void
      {
       trace(event.type);
      }
      
      private function changeListEvent(event:EvtClass):void
      {
       myUrl = event.objVaule;
       if(myUrl=="")
       {
        Alert.show("这个分类没有数据","警告");
        return;
       }
       myxml.send();
      }
     ]]>
    </mx:scrīpt>

     <mx:Label text="请选择你爱吃的东东" x="39" y="14"/>
     <cust:custList id="myList" listEvent="changeListEvent(event)" x="161" y="10"/>
     <mx:Panel title="{myxml.lastResult.rss.channel.title}" x="38" y="50">
       <cust:custDataGrid id="myGrid" width="80%" myCollection="{myxml.lastResult.rss.channel.item}" blogEvent="changeGridEvent(event)">
       </cust:custDataGrid>
     </mx:Panel>
     <mx:LinkButton label="菜鸟NEST" click="navigateToURL(new URLRequest('http://space.flash8.net/space/?273051'),'_blank')" x="110.5" y="276"/>
    </mx:Application>

     

    自定义组件一。数据表
    custDataGrid.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Metadata>
     [Event(name="blogEvent",type="flash.events.Event")]
    </mx:Metadata>
    <mx:scrīpt>
     <![CDATA[
      import flash.net.*
      import mx.collections.ArrayCollection;
      [Bindable]
      public var myCollection:ArrayCollection;
      
      public function writeString():String
      {
       return "you write";
      }
      
      private function changeHandle():void
      {
       dispatchEvent(new Event("blogEvent"));
      }
     ]]>
    </mx:scrīpt>
     <mx:DataGrid dataProvider="{myCollection}" change="changeHandle()">
      <mx:columns>
          <mx:DataGridColumn headerText="名称" dataField="title" />
          <mx:DataGridColumn headerText="描述" dataField="descrīption" width="100" />
       </mx:columns>
     </mx:DataGrid>
    </mx:VBox>

     

    自定义组件二。下拉列表框
    dustList.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="30">
    <mx:Metadata>
     [Event(name="listEvent",type="EvtClass")]
    </mx:Metadata>
    <mx:scrīpt>
     <![CDATA[
      private function changeHandle():void
      {
       var obj:EvtClass = new EvtClass(myComb.value as String,"listEvent");
       dispatchEvent(obj);
      }
     ]]>
    </mx:scrīpt>
     <mx:ComboBox id="myComb" change="changeHandle()" width="100">
      <mx:ArrayCollection id="myArr">
       <mx:Object label="水果" data="src/index.xml"/>
       <mx:Object label="蔬菜" data=""/>
      </mx:ArrayCollection>
     </mx:ComboBox>
    </mx:VBox>

     

    as文件  EvtClass.as
    功能:实现自定义的侦听事件

    package
    {
     import flash.events.Event
     public class EvtClass extends Event
     {
      public var objVaule:String;
      public function EvtClass(value:String,type:String)
      {
       super(type);
       this.objVaule = value;
      }
      
      override public function clone():Event
      {
       return new EvtClass(objVaule,type);
      }
     }
    }

     

    被调用的XML文件。  index.xml

    <?xml version="1.0" encoding="utf-8"?>
    <rss version="2.0">
    <channel>
    <title>我爱吃的水果</title>
    <item>
    <title>苹果</title>
    <descrīption>红色,味甜</descrīption>
    </item>
    <item>
    <title>桔子</title>
    <descrīption>黄色,酸酸</descrīption>
    </item>
    </channel>
    </rss>

     

    以上需注意各文件存放的目录。

  • flex中使用Glow,Blur效果

    2007-3-16

    以下实现一个简单的效果。部分代码来自网上教程

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" width="300" height="300">
     <mx:scrīpt>
      <![CDATA[

       <!--效果完成后标签不可见-->
       private function endEffectHandler():void
       {
        myLabel.visible = false;
       }
      ]]>
     </mx:scrīpt>

    <!--Parallel 可完现多个效果同时进行-->
     <mx:Parallel id="myEvent" target="{myLabel}" effectEnd="endEffectHandler()">
      <mx:Blur id="btnBlur" blurXFrom="20" blurXTo="0" blurYFrom="20" blurYTo="0"/>
      <mx:Move id="objmove" xFrom="100" yFrom="0" xTo="100" yTo="100"/>
     </mx:Parallel>
     <mx:Glow id="btnGlow" target="{myBtn}" blurXFrom="0" blurXTo="30" blurYFrom="0" blurYTo="30">
     </mx:Glow>

    <!--鼠标经过按钮,按钮发光。点击按钮后,执行标签向下移动并变模糊-->
     <mx:Button id="myBtn" x="116" y="136" label="运行"  mouseOver="btnGlow.play()" click="myEvent.play();myLabel.visible = true"/>
     <mx:Label id="myLabel" x="100" y="0" text="欢迎使用Flex" fontSize="12"/>
    </mx:Application>

  • 用editplus编译flex

    2007-3-13

    刚准备接触flex.喜欢用editplus,可在网上看了一些文章,还是没把editplus编译好,一直提示没有JAVA运行环境。直到我下了SDK才解决。所有过程如下:

    (本文有部分转载)原文作者:无忧脚本与逍遥云

    1。安装软件  Flex Builder 2 Flex Builder 2 
    下载地址:http://www.9iv.com/DOWN/controls/downlist.aspx?id=3109

    2。安装软件JDK 1.5.0
    下载地址:http://java.sun.com/javase/downloads/index_jdk5.jsp
    进入后选择JDK 5.0 Update 11 ,然后点Accept>Continue,接下来选择Windows Offline Installation, Multi-language ( jdk-1_5_0_10-windows-i586-p.exe )下载。

    安装完以后,打开 Edit plus ,建立mxml扩展名

    注:这儿的语法文件用的是xml的,在EditPlus的安装目录下有的,你也可以自己扩展建一下。

    随意写一个文件,我们发现已经有了mxml扩展名

    2.建立模版文件

    注:这儿的模版文件可以随意放,为了好管理起见,我们将template.mxml放在EP(以下简称)的安装目录下。
    template.mxml格式如下:

    http://www.adobe.com/2006/mxml" layout="absolute">
    ^!

    注:^!为光标位置
    在这儿我们利用“上移”按钮将flex模版上移,以便于新建flex文档


    新建一个flex文档,我们发现语法已经加亮了


     

    3.编译我们的mxml文件
    配置如下:

    新建组,名称为:Flex,添加工具,名为“Compile Flex”
    参数:$(FileName) 为文件的名称
    起始目录:$(FileDir) 为文件的位置目录

    在这儿你必须要有flex SDK 2,定位好mxmlc.exe
    勾选的"捕获输出"可以按自己需要来定。

    4.开始编译我们的文件。
    先选中flex组

    写一个文件,这儿在光标处添加一句:

    保存


     

    然后Ctrl+1,需要等一会,看到结果如下

    这就说明我们的flex编译成功了,如果出错,请看出错原因,因为在这儿编译器返回的结果输出都在这儿(提示:前面的捕获输出设置)

    在这儿,我总是编译出错。提示没有JAVA运行环境。所以还需要配置一下。

    选择我的电脑->右健属性->高级->环境变量->新建

    变量名填:JAVA_HOME
    变量值填:JDK的安装路径,如  C:\Program Files\Java\jdk1.5.0_11


    如果编译成功
    可以对应看到一个与名字相应的swf文件

    运行,可以看到结果如下:

    感觉怎么样?我觉得不够,我还想在ep里面运行我刚才的swf文件,怎么办呢?
    好办!
    5.打开刚刚编译成功的swf文件
    在我们新建组那里,再添加一个工具,名叫"Run Flex"
    设置如图:

    命令这儿定位好你的flash播放器(版本9)
    参数:$(FileNameNoExt).swf 
    说明:$(FileNameNoExt)为我们保存的不包括扩展名(.mxml),后面跟的.swf就成了我们编译成功的swf文件名字了。
    定义好起始目录,选中“退出时关闭窗口",为了关闭那个cmd窗口.
    保存,然后回到我们书写的文档窗口,按下Ctrl+2,我们要的结果达到了。

  • 敬文图书馆

    2007-3-05

    怀念母校,画一幅学校的图书馆。画面有些灰:(

  • 女儿的照片

    2007-3-05

    女儿的百日照

  • 自己画的一些图片

    2007-3-02

  • 数据压缩算法

    2007-2-06

    //说明,利用此方法进行压缩时,有一定的局限性,"0000"将被忽略掉,目前还没有找到解决方法
    //使用快速压缩时,只能含有数字和字母
    var dic:Array = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", ",", "a", "u", "d", "w"];
    var quick_dic:Object = new Object();
    for (var i = 0; i<dic.length; i++) {
     quick_dic["char"+dic[i]] = i;
    }
    function quickCoding(_str:String):String {
     var out_str:String = "";
     var ss:Number = 0;
     while (_str.length%4) {
      _str += "0";
      ss++;
     }
     out_str += String(ss);
     var len:Number = _str.length;
     for (i=0; i<len; i += 4) {
      out_str += String.fromCharCode(quick_dic["char"+_str.charAt(i)] << 12 | quick_dic["char"+_str.charAt(i+1)] << 8 | quick_dic["char"+_str.charAt(i+2)] << 4 | quick_dic["char"+_str.charAt(i+3)]);
     }
     return out_str;
    }
    function uncoding(_str:String):String {
     var out_str:String = "";
     var len:Number = _str.length;
     var ss:Number = Number(_str.charAt(0));
     for (i=1; i<len; i++) {
      var n:Number = _str.charCodeAt(i);
      //trace(n.toString(16))
      out_str += dic[(n & 0xF000) >> 12]+dic[(n & 0x0F00) >> 8]+dic[(n & 0x00F0) >> 4]+dic[(n & 0x000F)];
     }
     out_str = out_str.substr(0, out_str.length-ss);
     return out_str;
    }
    var str:String = "25a133ad,25a133,25a133,25a133,25a133au,230a105ad,230a105,230a105,240a105,259a105,274a105,303a105,323a105,337a105,345a105,347a105,348a105,348a105,348a105,348a105au,274a128ad,274a128,273a135,270a160,268a179,265a196,263a207,261a215,261a217,261a217,261a217,261a217,261a217,261a217,261a217au,305a128ad,305a128,308a136,316a159,322a181,325a199,327a206,327a206,327a206,327a206au,232a154ad,233a154,247a155,266a156,289a156,310a155,324a155,335a155,339a155,339a155,339a155,339a155,339a155,339a155,339a155au,44a137ad,44a137,44a137,44a137au,419a130ad,419a130,420a131,428a141,435a146,442a152,445a156,453a162,459a164,462a165,462a165,462a166,461a165,457a160,448a149,445a146,444a145,444a145,443a145,443a146,445a152,449a158,455a159,457a159,465a156,474a151,478a150,481a148,482a148,482a148,482a152,481a166,481a171,481a171,482a170,484a159,487a152,489a150,489a149,489a149,489a149,489a149,489a149,489a149,489a149,489a149,489a149,489a149,489a149,489a149au,35a285ad,35a285,35a285,35a285,35a285au,560a138ad,560a138,568a148,577a159,584a168,591a175,598a182,599a183,599a183,599a183,598a180";
    //
    //
    ///////////////////////////////////
    var s_time:Number = getTimer();
    var q_code_str:String = quickCoding(str);
    var d_time:Number = getTimer()-s_time;
    trace("快速压缩耗时:"+d_time+"ms");
    trace("压缩后字符串(length="+q_code_str.length+")");
    trace("压缩后字串为"+q_code_str);
    //////////////////////////////////
    //
    ///////////////////////////////////
    var s_time:Number = getTimer();
    var uncode_str:String = uncoding(q_code_str);
    var d_time:Number = getTimer()-s_time;
    trace("解压耗时:"+d_time+"ms");
    trace("还原后字符串(length="+uncode_str.length+"):");
    //+uncode_str)
    trace("还原后字串为"+uncode_str);
    trace("还原是否正确:"+(uncode_str == str));

    此压缩算法比LZW速度快,压缩比高。但是有局限性。"0000"将被忽略掉

  • 颜色面板,包括颜色样本,混色器

    2007-2-06

    以下是代码片段,您可以CTRL+A,然后复制。

    //Actionscrīpt1.0 Flash6.0 player下
    fscommand("allowscale", "false");
    var lightColor = 0xFFFFFF;
    var darkColor = 0x9D9DA1;
    var bgColor = 0xEEEEEE;
    genColorPicker();
    init("007f7f", 0);
    function genColorPicker() {
     var depth = 0;
     var TF = new TextFormat();
     TF.font = "Arial";
     TF.size = 12;
     this.beginFill(bgColor);
     drawRect(this, 288, 160, 0, 0, .5, darkColor, lightColor);
     this.endFill();
     this.createEmptyMovieClip("mcBorder", 1000);
     drawRect(mcBorder, 116, 15, 5, 5);
     this.createEmptyMovieClip("mcOldColor", depth++);
     with (mcOldColor) {

    _x = 5;

    _y = 5;

    beginFill(0x000000);

    drawRect(mcOldColor, 58, 15, 0, 0, .5, 0x000000, 0x000000);

    endFill();
     }
     this.createEmptyMovieClip("mcNewColor", depth++);
     with (mcNewColor) {

    _x = 63;

    _y = 5;

    beginFill(0xFF0000);

    drawRect(mcNewColor, 58, 15, 0, 0, .5, 0xFF0000, 0xFF0000);

    endFill();
     }
     drawRect(mcBorder, 62, 15, 158, 5);
     this.createTextField("tfLabel", depth++, 131, 3, 27, 16);
     with (tfLabel) {

    selectable = false;

    text = "Hex:";

    setTextFormat(TF);
     }
     this.createTextField("tfHex", depth++, 158, 3, 62, 19);
     with (tfHex) {

    type = "input";

    restrict = "0-9A-F";

    maxChars = 6;

    setNewTextFormat(TF);

    tfHex.onKillFocus = hexChg;
     }
     this.createEmptyMovieClip("mcNone", depth++);
     with (mcNone) {

    _x = 252;

    _y = 5;

    beginFill(bgColor);

    drawRect(mcNone, 15, 15, 0, 0, .5, darkColor, lightColor);

    endFill();

    beginFill(0xFFFFFF);

    drawRect(mcNone, 9, 9, 3, 3);

    endFill();

    lineStyle(2, 0xFF0000);

    moveTo(4, 11);

    lineTo(11, 4);

    drawRect(mcNone, 9, 9, 3, 3, .5, 0x000000, 0x000000);

    mcNone.useHandCursor = false;

    mcNone.onPress = function() {

     with (_parent) {

      drawRect(this, 15, 15, 0, 0, .5, lightColor, darkColor);

     }

    };

    mcNone.onRelease = mcNone.onDragOut=function () {

     with (_parent) {

      var myColor = new Color(mcOldColor);

      tfHex.text = ("000000"+myColor.getRGB().toString(16)).substr(-6);

      hexChg();

      tfHex.text = "";

      drawRect(this, 15, 15, 0, 0, .5, darkColor, lightColor);

     }

    };
     }
     this.createEmptyMovieClip("mcMode", depth++);
     with (mcMode) {

    _x = 268;

    _y = 5;

    drawRect(mcMode, 15, 15, 0, 0, .5, darkColor, lightColor);

    mcMode.chgMode = function(mode) {

     with (this) {

      var arrMc = [_parent.mcMixer, _parent.mcSwatches];

      for (var i = 0; i<arrMc.length; i++) {

       arrMc[i]._visible = 0;
     
     }

      arrMc[Mode]._visible = 1;

      switch (mode) {

      case 0 :

       colors = [0xFF0000, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF, 0xFF00FF, 0xFF0000];

       alphas = [100, 100, 100, 100, 100, 100, 100];

       ratios = [0x00, 0x2A, 0x55, 0x7F, 0xAA, 0xD4, 0xFF];

       matrix = {matrixType:"box", x:3, y:3, w:9, h:9, r:0};

       beginGradientFill("linear", colors, alphas, ratios, matrix);

       _parent.drawRect(this, 9, 9, 3, 3);

       colors = [0x808080, 0x808080];

       alphas = [0, 100];

       ratios = [0x00, 0xFF];

       matrix = {matrixType:"box", x:3, y:3, w:9, h:9, r:0.5*Math.PI};

       beginGradientFill("linear", colors, alphas, ratios, matrix);

       _parent.drawRect(this, 9, 9, 3, 3, .5, 0x000000, 0x000000);
      
    endFill();

       break;

      case 1 :
      
    beginFill(0xFF0000);

       _parent.drawRect(this, 4.5, 4.5, 3, 3, .5, 0x000000, 0x000000);

       beginFill(0x00FF00);

       _parent.drawRect(this, 4.5, 4.5, 7.5, 3, .5, 0x000000, 0x000000);

       beginFill(0x0000FF);

       _parent.drawRect(this, 4.5, 4.5, 3, 7.5, .5, 0x000000, 0x000000);

       beginFill(0xFFFF00);

       _parent.drawRect(this, 4.5, 4.5, 7.5, 7.5, .5, 0x000000, 0x000000);
      
    endFill();

       break;
     
     }

     }

    };

    mcMode.useHandCursor = false;

    mcMode.onPress = function() {

     with (_parent) {

      drawRect(this, 15, 15, 0, 0, .5, lightColor, darkColor);

     }

    };

    mcMode.onRelease = mcMode.onDragOut=function () {

     with (_parent) {

      drawRect(this, 15, 15, 0, 0, .5, darkColor, lightColor);

     }

     mode = mode == 0 ? 1 : 0;

     chgMode(mode);

    };
     }
     this.createEmptyMovieClip("mcMixer", depth++);
     with (mcMixer) {

    _visible = 0;

    createEmptyMovieClip("mcBorder", 1000);

    drawRect(mcBorder, 96, 96, 5, 25);

    createEmptyMovieClip("mcBoardHS", depth++);

    with (mcBoardHS) {
     
    _x = 5;

     _y = 25;

     var colors = [0xFF0000, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF, 0xFF00FF, 0xFF0000];

     var alphas = [100, 100, 100, 100, 100, 100, 100];

     var ratios = [0x00, 0x2A, 0x55, 0x7F, 0xAA, 0xD4, 0xFF];

     var matrix = {matrixType:"box", x:0, y:0, w:96, h:96, r:0};

     beginGradientFill("linear", colors, alphas, ratios, matrix);

     drawRect(mcBoardHS, 96, 96);
     
    endFill();

     colors = [0x808080, 0x808080];

     alphas = [0, 100];

     ratios = [0x00, 0xFF];

     matrix = {matrixType:"box", x:0, y:0, w:96, h:96, r:0.5*Math.PI};

     beginGradientFill("linear", colors, alphas, ratios, matrix);

     drawRect(mcBoardHS, 96, 96);
     
    endFill();

     createEmptyMovieClip("mcMask", 1);

     mcMask.beginFill(0x000000);

     drawRect(mcMask, 96, 96);

     mcMask.endFill();

     createEmptyMovieClip("mcPoint", 0);

     with (mcPoint) {

      _x = 1;

      _y = 1;

      lineStyle(.5, 0xFFFFFF);

      moveTo(0, 1);

      lineTo(0, 5);

      moveTo(1, 0);

      lineTo(5, 0);

      moveTo(0, -1);

      lineTo(0, -5);

      moveTo(-1, 0);

      lineTo(-5, 0);

      setMask(mcMask);

     }

     mcBoardHS.useHandCursor = false;

     mcBoardHS.onPress = function() {

      mcPoint._x = _xmouse;

      mcPoint._y = _ymouse;

      Mouse.hide();

      _parent._parent.adjustHsl();

      this.onMouseMove = function() {

       this.mcPoint._x = this._xmouse>0 && this._xmouse<96 ? this._xmouse : (this._xmouse<=0 ? 1 : 95);

       this.mcPoint._y = this._ymouse>0 && this._ymouse<96 ? this._ymouse : (this._ymouse<=0 ? 1 : 95);

       this._parent._parent.adjustHsl();

       updateAfterEvent();
     
    };

      this.onMouseUp = function() {

       Mouse.show();

       delete this.onMouseUp;

       delete this.onMouseMove;
     
    };
     
    };

    }

    drawRect(mcBorder, 15, 96, 106, 25);

    createEmptyMovieClip("mcLighteness", depth++);

    with (mcLighteness) {

     _x = 106;

     _y = 25;

     createEmptyMovieClip("mcBg", 0);

     with (mcBg) {

      beginFill(0x7F7F7F);

      drawRect(mcBg, 15, 96, 0, 0, 0, 0x7F7F7F);
     
    endFill();

     }

     createEmptyMovieClip("mcLighteness", 1);
     
    with (mcLighteness) {

      colors = [0xFFFFFF, 0xFFFFFF, 0x000000, 0x000000];

      alphas = [100, 0, 0, 100];

      ratios = [0x00, 0x7F, 0x80, 0xFF];

      matrix = {matrixType:"box", x:0, y:0, w:15, h:96, r:.5*Math.PI};

      mcLighteness.beginGradientFill("linear", colors, alphas, ratios, matrix);

      drawRect(mcLighteness, 15, 96);
     
    endFill();

      mcLighteness.useHandCursor = false;

      mcLighteness.onPress = function() {

       if (_ymouse>0 && _ymouse<96) {

        _parent.mcArrow._y = _ymouse;
     
     }
     
      Mouse.hide();

       _parent._parent._parent.adjustHsl();
     
      this.onMouseMove = function() {

        this._parent.mcArrow._y = this._ymouse>0 && this._ymouse<96 ? this._ymouse : (this._ymouse<=0 ? 1 : 95);

        this._parent._parent._parent.adjustHsl();
     
       updateAfterEvent();
      
    };
     
      this.onMouseUp = function() {
     
       delete this.onMouseUp;
     
       delete this.onMouseMove;
     
       Mouse.show();
      
    };
     
    };

     }

     createEmptyMovieClip("mcArrow", 2);

     with (mcArrow) {

      _x = 16;

      _y = 1;
     
    beginFill(0x000000);

      lineTo(5, -4.5);

      lineTo(5, 4.5);

      lineTo(0, 0);
     
    endFill();

      mcArrow.useHandCursor = false;

      mcArrow.onPress = function() {

       ōffsetY = _ymouse;

       _parent._parent._parent.adjustHsl();
     
      this.onMouseMove = function() {

        this.t = this._parent._ymouse-this.offsetY;

        this._y = this.t>0 && this.t<96 ? this.t : (this.t<=0 ? 1 : 95);

        this._parent._parent._parent.adjustHsl();
     
       updateAfterEvent();
      
    };
     
      this.onMouseUp = function() {
     
       delete this.onMouseUp;
     
       delete this.onMouseMove;

        delete this.offsetY;

        delete this.t;
      
    };
     
    };

     }

    }

    var arrRGBHSL = ["R", "G", "B", "H", "S", "L"];

    for (var i = 0; i<6; i++) {

     var y = 25+i*16.5+(i>2 ? 2 : 0);

     drawRect(mcBorder, 100, 12, 143, y);

     drawRect(mcBorder, 25, 12, 248, y);

     createEmptyMovieClip("mcFader"+arrRGBHSL[i], depth++);

     eval("mcFader"+arrRGBHSL[i]).limit = arrRGBHSL[i] == "H" ? 359 : (arrRGBHSL[i] == "S" || arrRGBHSL[i] == "L" ? 100 : 255);

     eval("mcFader"+arrRGBHSL[i]).flag = arrRGBHSL[i];

     with (eval("mcFader"+arrRGBHSL[i])) {

      _x = 131;

      _y = y;

      createTextField("tfLabel", 6, -2, -3, 15, 16);

      with (tfLabel) {
      
    selectable = false;

       text = arrRGBHSL[i]+":";
      
    setTextFormat(TF);
     
     }

      createTextField("tfValue", 5, 118, -3, 26, 16);

      with (tfValue) {
      
    type = "input";

       text = 0;

       restrict = "0-9";

       maxChars = 3;

       //setNewTextFormat(TF);
     
     }

      tfValue.onKillFocus = tfValue.onChanged=function () {

       if (this.text == "") {

        this.text = 0;

       } else if (this.text>limit) {

        this.text = limit;

       } else {

        this.text = parseInt(this.text);
     
     }

       _parent._parent.update(flag == "R" || flag == "G" || flag == "B" ? 0 : 1);
     
    };

      createEmptyMovieClip("mcBox", 10);

      with (mcBox) {

       _x = 13;
      
    beginFill(0x000000);

       drawRect(mcBox, 4, 12, 0, 0, 0, 0x000000, 0x000000);
      
    endFill();
      
    beginFill(0xFFFFFF);

       drawRect(mcBox, 2, 12, 1, 0, 0, 0xFFFFFF, 0xFFFFFF);
      
    endFill();

       mcBox.useHandCursor = false;

       mcBox.onPress = function() {

        ōffsetX = _xmouse;
     
      this.onMouseMove = function() {

         this.t = this._parent._xmouse-this.offsetX;

         this.t = this.t>12 && this.t<107 ? this.t : (this.t<=12 ? 13 : 107);

         if (this.t>12 && this.t<107) {

          this._x = this.t;

          this._parent.tfValue.text = Math.round((this.t-13)*this._parent.limit/94);

          this._parent._parent._parent.update(this._parent.flag == "R" || this._parent.flag == "G" || this._parent.flag == "B" ? 0 : 1);
       
     }
     
       updateAfterEvent();
       
    };
     
      this.onMouseUp = function() {
     
       delete this.onMouseMove;
     
       delete this.onMouseMove;
     
        delete this.t;

         delete this.offsetX;
       
    };
      
    };
     
     }

      createEmptyMovieClip("mcUp", 3);

      with (mcUp) {

       _x = 145;

       _y = -.5;
      
    beginFill(bgColor);

       drawRect(mcUp, 7, 6, 0, 0, .5, darkColor, lightColor);
      
    beginFill(0x000000);

       moveTo(3.5, .5);

       lineTo(0.5, 5.5);

       lineTo(6.5, 5.5);

       lineTo(3.5, .5);
      
    endFill();

       mcUp.useHandCursor = false;

       mcUp.onPress = function() {

        with (_parent._parent._parent) {

         drawRect(this, 7, 6, 0, 0, .5, lightColor, darkColor);
      
     }

        iv0 = setInterval(prepare, 500);

        up();
      
    };

       mcUp.prepare = function() {

        iv1 = setInterval(up, 1);

        clearInterval(iv0);
      
    };

       mcUp.up = function() {

        if (_parent.tfValue.text<_parent.limit) {

         _parent.tfValue.text++;

         _parent._parent._parent.update(_parent.flag == "R" || _parent.flag == "G" || _parent.flag == "B" ? 0 : 1);
      
     }
      
    };

       mcUp.onRelease = mcUp.onDragOut=function () {

        with (_parent._parent._parent) {

         drawRect(this, 7, 6, 0, 0, .5, darkColor, lightColor);
      
     }

        clearInterval(iv0);

        clearInterval(iv1);
      
    };
     
     }

      createEmptyMovieClip("mcDown", 2);

      with (mcDown) {

       _x = 145;

       _y = 6;
      
    beginFill(bgColor);

       drawRect(mcDown, 7, 6, 0, 0, .5, darkColor, lightColor);
      
    beginFill(0x000000);

       moveTo(3.5, 5.5);

       lineTo(0.5, .5);

       lineTo(6.5, .5);

       lineTo(3.5, 5.5);
      
    endFill();

       mcDown.useHandCursor = false;

       mcDown.onPress = function() {

        with (_parent._parent._parent) {

         drawRect(this, 7, 6, 0, 0, .5, lightColor, darkColor);
      
     }

        iv0 = setInterval(prepare, 500);

        down();
      
    };

       mcDown.prepare = function() {

        iv1 = setInterval(down, 1);

        clearInterval(iv0);
      
    };

       mcDown.down = function() {

        if (_parent.tfValue.text>0) {

         _parent.tfValue.text--;

         _parent._parent._parent.update(_parent.flag == "R" || _parent.flag == "G" || _parent.flag == "B" ? 0 : 1);
      
     }
      
    };

       mcDown.onRelease = mcDown.onDragOut=function () {

        with (_parent._parent._parent) {

         drawRect(this, 7, 6, 0, 0, .5, darkColor, lightColor);
      
     }

        clearInterval(iv0);

        clearInterval(iv1);
      
    };
     
     }

      createEmptyMovieClip("mcBg", 4);
     
     with (mcBg) {

       _x = 12;
      
    beginFill(0xFFFFFF);

       drawRect(mcBg, 100, 12);
      
    endFill();

       mcBg.useHandCursor = false;

       mcBg.onPress = function() {

        _parent.tfValue.text = Math.round(_xmouse*_parent.limit/100);

        _parent._parent._parent.update(_parent.flag == "R" || _parent.flag == "G" || _parent.flag == "B" ? 0 : 1);
     
      this.onMouseMove = function() {

         this.t = this._xmouse>=0 && this._xmouse<=100 ? this._xmouse : (this._xmouse<0 ? 0 : 100);

         this._parent.tfValue.text = Math.round(this.t*this._parent.limit/100);

         this._parent._parent._parent.update(this._parent.flag == "R" || this._parent.flag == "G" || this._parent.flag == "B" ? 0 : 1);
     
       updateAfterEvent();
       
    };
     
      this.onMouseUp = function() {
     
        delete this.t;
     
       delete this.onMouseUp;
     
       delete this.onMouseMove;
       
    };
      
    };
     
     }

      if (flag == "L") {

       createEmptyMovieClip("mcLighteness", 7);
      
    with (mcLighteness) {
     
       _x = 12;
     
      colors = [0xFFFFFF, 0xFFFFFF, 0x000000, 0x000000];
     
      alphas = [100, 0, 0, 100];
     
      ratios = [0x00, 0x7F, 0x80, 0xFF];

        matrix = {matrixType:"box", x:0, y:0, w:96, h:12, r:-1*Math.PI};
     
       beginGradientFill("linear", colors, alphas, ratios, matrix);

        drawRect(mcLighteness, 100, 12);
       
    endFill();
     
     }

      } else if (flag == "H") {

       createEmptyMovieClip("mcHue", 7);

       with (mcHue) {
     
       _x = 12;
     
       colors = [0xFF0000, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF, 0xFF00FF, 0xFF0000];
     
       alphas = [100, 100, 100, 100, 100, 100, 100];
     
       ratios = [0x00, 0x2A, 0x55, 0x7F, 0xAA, 0xD4, 0xFF];

        matrix = {matrixType:"box", x:0, y:0, w:100, h:10, r:0};
     
       beginGradientFill("linear", colors, alphas, ratios, matrix);

        drawRect(mcHue, 100, 12);
       
    endFill();

        swapDepths(mcBg);
     
     }

      } else if (flag == "R" || flag == "G" || flag == "B" || flag == "S") {

       createEmptyMovieClip("mcBegin", 8);

       with (mcBegin) {

        colors = [flag == "S" ? 0x808080 : 0x000000, flag == "S" ? 0x808080 : 0x000000];

        alphas = [100, 0];
     
       ratios = [0x00, 0xFF];

        matrix = {matrixType:"box", x:12, y:0, w:100, h:12, r:0};
     
       beginGradientFill("linear", colors, alphas, ratios, matrix);

        drawRect(mcBegin, 100, 12, 12);
       
    endFill();
     
     }

       createEmptyMovieClip("mcEnd", 7);

       with (mcEnd) {

        colors = [0x000000, 0x000000];
     
       alphas = [0, 100];
     
       ratios = [0x00, 0xFF];

        matrix = {matrixType:"box", x:12, y:0, w:100, h:12, r:0};
     
       beginGradientFill("linear", colors, alphas, ratios, matrix);

        drawRect(mcEnd, 100, 12, 12);
       
    endFill();
     
     }

       if (flag == "S") {

        mcBg.swapDepths(9);
     
     }
     
     }

     }

    }
     }
     this.createEmptyMovieClip("mcSwatches", depth++);
     with (mcSwatches) {

    _visible = 0;

    var arrColor = new Array();

    var arrNum = new Array("00", "33", "66", "99", "CC", "FF");

    var arrBaseColor = new Array("000000", "333333", "666666", "999999", "CCCCCC", "FFFFFF", "FF0000", "00FF00", "0000FF", "FFFF00", "00FFFF", "FF00FF");

    for (var i = 0; i<12; i++) {

     arrColor[arrColor.length] = arrBaseColor[i];

     for (var j = 0; j<18; j++) {

      arrColor[arrColor.length] = arrNum[Math.floor(i/6)*3+Math.floor(j/6)]+arrNum[j%6]+arrNum[i%6];

     }

     arrColor[arrColor.length] = "000000";

     for (var j = 0; j<15; j++) {

      var t = (Math.round((1-(i*15+j)/179)*255)).toString(16);

      t = t.length>1 ? t : "0"+t;

      t = t.toUpperCase();

      arrColor[arrColor.length] = t+t+t;

     }

    }

    var cols = 35;

    for (var i = 0; i<Math.ceil(arrColor.length/cols); i++) {

     for (var j = 0; j<cols; j++) {

      var t = i*cols+j<arrColor.length ? arrColor[i*cols+j] : "000000";

      createEmptyMovieClip("mc"+t+i+j, depth++);

      var mc = eval("mc"+t+i+j);

      with (mc) {

       _y = 25+i*8;

       _x = (j>19 ? 3 : 5)+j*8;

       beginFill(parseInt(t, 16));

       drawRect(mc, (j == 19 ? 6 : 8), 8, 0, 0, .5, 0x0000000, 0x000000);
      
    endFill();
     
     }

      mc.onRollOver = function() {
     
     with (_parent) {

        this.t = tfHex.text;

        tfHex.text = this._name.substr(2, 6);
     
      hexChg();
     
     }

       with (mcBorder) {

        _visible = 1;

        _x = this._x;

        _y = this._y;

        _width = this._width;

        _height = this._height;
     
     }
     
    };

      mc.onPress = function() {

       _parent.tfHex.text = this.t=this._name.substr(2, 6);
     
    };

      mc.onRollOut = mc.onDragOut=function () {

       _parent.tfHex.text = this.t;

       _parent.hexChg();

       mcBorder._visible = 0;
     
    };

     }

    }

    createEmptyMovieClip("mcBorder", 1000);

    drawRect(mcBorder, 8, 8, 0, 0, .5, 0xFFFFFF, 0xFFFFFF);

    mcBorder._visible = 0;
     }
     this.createTextField("tfCopyright0", depth++, 6, 141, 283, 20);
     with (tfCopyright0) {

    selectable = false;

    html = true;

    htmlText = "<p align=\"right\"><font size=\"10\" face=\"Arial\" color=\"#FFFFFF\"><a href=\"<a target="_blank" rel="nofollow" href="http://www.nlimi.com\">http://www.nlimi.com\</a>" target=\"_blank\">Copyright (c) Afeila Studio All rights reserved.</p>";
     }
     this.createTextField("tfCopyright", depth++, 5, 140, 283, 20);
     with (tfCopyright) {

    selectable = false;

    html = true;

    htmlText = "<p align=\"right\"><font size=\"10\" face=\"Arial\" color=\"#999999\">Copyright (c) Afeila Studio All rights reserved.</p>";
     }
     this.createEmptyMovieClip("mcReset", depth++);
     with (mcReset) {

    _x = 5;

    _y = 126;

    beginFill(bgColor);

    drawRect(mcReset, 89, 15, 0, 0, .5, darkColor, lightColor);

    endFill();

    createTextField("tfLabel", 0, 0, -2, 89, 20);

    with (tfLabel) {
     
    selectable = false;
     
    html = true;

     htmlText = "<p align=\"center\"><font face=\"Arial\">Reset</p>";

    }

    mcReset.useHandCursor = false;

    mcReset.onPress = function() {

     with (_parent) {

      drawRect(this, 89, 15, 0, 0, .5, lightColor, darkColor);

     }

    };

    mcReset.onRelease = mcReset.onDragOut=function () {

     with (_parent) {

      drawRect(this, 89, 15, 0, 0, .5, darkColor, lightColor);

      var myColor = new Color(mcOldColor);

      tfHex.text = ("000000"+myColor.getRGB().toString(16)).substr(-6);

      hexChg();

     }

    };
     }
     this.createEmptyMovieClip("mcOK", depth++);
     with (mcOK) {

    _x = 99;

    _y = 126;

    beginFill(bgColor);

    drawRect(mcOK, 90, 15, 0, 0, .5, darkColor, lightColor);

    endFill();

    createTextField("tfLabel", 0, 0, -2, 90, 20);

    with (tfLabel) {
     
    selectable = false;
     
    html = true;

     htmlText = "<p align=\"center\"><font face=\"Arial\">OK</p>";

    }

    mcOK.useHandCursor = false;

    mcOK.onPress = function() {

     with (_parent) {

      drawRect(this, 90, 15, 0, 0, .5, lightColor, darkColor);

     }

    };

    mcOK.onRelease = mcOK.onDragOut=function () {

     with (_parent) {

      drawRect(this, 90, 15, 0, 0, .5, darkColor, lightColor);

     }

    };
     }
     this.createEmptyMovieClip("mcCancel", depth++);
     with (mcCancel) {

    _x = 194;

    _y = 126;

    beginFill(bgColor);

    drawRect(mcCancel, 89, 15, 0, 0, .5, darkColor, lightColor);

    endFill();

    createTextField("tfLabel", 0, 0, -2, 89, 20);

    with (tfLabel) {
     
    selectable = false;
     
    html = true;

     htmlText = "<p align=\"center\"><font face=\"Arial\">Cancel</p>";

    }

    mcCancel.useHandCursor = false;

    mcCancel.onPress = function() {

     with (_parent) {

      drawRect(this, 89, 15, 0, 0, .5, lightColor, darkColor);

     }

    };

    mcCancel.onRelease = mcCancel.onDragOut=function () {

     with (_parent) {

      drawRect(this, 89, 15, 0, 0, .5, darkColor, lightColor);

     }

    };
     }
    }
    function init(initColor, mode) {
     tfHex.text = initColor;
     hexChg();
     mode = mode != null ? mode : 0;
     mcMode.mode = mode;
     mcMode.chgMode();
     var myColor = new Color(mcOldColor);
     myColor.setRGB(parseInt(tfHex.text, 16));
    }
    function hexChg() {
     tfHex.text += "000000".substr(0, 6-tfHex.text.length);
     with (mcMixer) {

    mcFaderR.tfValue.text = parseInt(tfHex.text.substr(0, 2), 16);

    mcFaderG.tfValue.text = parseInt(tfHex.text.substr(2, 2), 16);

    mcFaderB.tfValue.text = parseInt(tfHex.text.substr(4, 2), 16);

    update(0);
     }
    }
    function drawRect(mc, w, h, oX, oY, lW, c0, c1) {
     oX = oX != null ? oX : 0;
     oY = oY != null ? oY : 0;
     c0 = c0 != null ? c0 : lightColor;
     c1 = c1 != null ? c1 : darkColor;
     with (mc) {

    moveTo(w+oX, oY);

    lineStyle(lW != null ? lW : .5, c0);

    lineTo(w+oX, h+oY);

    lineTo(oX, h+oY);

    lineStyle(lW != null ? lW : .5, c1);

    lineTo(oX, oY);

    lineTo(w+oX, oY);
     }
    }
    function adjustHsl() {
     with (mcMixer) {

    var h = (mcBoardHS.mcPoint._x-1)*359/94;

    var s = (95-mcBoardHS.mcPoint._y)*100/94;

    var v = (95-mcLighteness.mcArrow._y)*100/94;

    mcFaderH.tfValue.text = Math.round(h);

    mcFaderS.tfValue.text = Math.round(s);

    mcFaderL.tfValue.text = Math.round(v);
     }
     update(1);
    }
    function update(mode) {
     with (mcMixer) {

    switch (mode) {

    case 0 :

     var hsl = rgbToHsl(parseInt(mcFaderR.tfValue.text), parseInt(mcFaderG.tfValue.text), parseInt(mcFaderB.tfValue.text));

     mcFaderH.tfValue.text = Math.round(hsl.h);

     mcFaderS.tfValue.text = Math.round(hsl.s*100);

     mcFaderL.tfValue.text = Math.round(hsl.l*100);

     break;

    case 1 :

     var rgb = hslToRgb(parseInt(mcFaderH.tfValue.text), parseInt(mcFaderS.tfValue.text)/100, parseInt(mcFaderL.tfValue.text)/100);

     mcFaderR.tfValue.text = Math.round(rgb.r);

     mcFaderG.tfValue.text = Math.round(rgb.g);

     mcFaderB.tfValue.text = Math.round(rgb.b);

     break;

    }

    var R, G, B, H, S, L;

    R = parseInt(mcFaderR.tfValue.text);

    G = parseInt(mcFaderG.tfValue.text);

    B = parseInt(mcFaderB.tfValue.text);

    H = parseInt(mcFaderH.tfValue.text);

    S = parseInt(mcFaderS.tfValue.text);

    L = parseInt(mcFaderL.tfValue.text);

    tfHex.text = toHex(R)+toHex(G)+toHex(B);

    var arrRGBHSL = ["R", "G", "B", "H", "S", "L"];

    for (var i = 0; i<arrRGBHSL.length; i++) {

     with (eval("mcFader"+arrRGBHSL[i])) {

      mcBox._x = Math.round(tfValue.text*94/limit)+13;

      switch (flag) {

      case "R" :

      case "G" :

      case "B" :

       var beginColor = new Color(mcBegin);

       var endColor = new Color(mcEnd);

       var c0, c1;
     
      switch (flag) {
     
      case "R" :

        c0 = G*256+B;

        c1 = 255*256*256+G*256+B;
     
       break;
     
      case "G" :

        c0 = R*256*256+B;

        c1 = R*256*256+255*256+B;
     
       break;
     
      case "B" :

        c0 = R*256*256+G*256;

        c1 = R*256*256+G*256+255;
     
       break;
     
     }

       beginColor.setRGB(c0);

       endColor.setRGB(c1);

       break;

      case "H" :

       var myColor = new Color(mcHue);

       myColor.setTransform({ra:S, rb:(100-S)*1.275, ga:S, gb:(100-S)*1.275, ba:S, bb:(100-S)*1.275});

       myColor = new Color(mcBg);

       myColor.setRGB(L<50 ? 0x000000 : 0xFFFFFF);

       mcBg._alpha = L<50 ? (50-L)*2 : (L-50)*2;

       break;

      case "S" :

       var myColor = new Color(mcEnd);

       var rgb = hslToRgb(H, 1, .5);

       myColor.setRGB(Math.round(rgb.r)*256*256+Math.round(rgb.g)*256+Math.round(rgb.b));

       myColor = new Color(mcBg);

       myColor.setRGB(L<50 ? 0x000000 : 0xFFFFFF);

       mcBg._alpha = L<50 ? (50-L)*2 : (L-50)*2;

       break;

      case "L" :

       var myColor = new Color(mcBg);

       var rgb = hslToRgb(H, S/100, .5);

       myColor.setRGB(Math.round(rgb.r)*256*256+Math.round(rgb.g)*256+Math.round(rgb.b));

       break;
     
     }

     }

    }

    mcBoardHS.mcPoint._x = Math.round(H*94/359)+1;

    mcBoardHS.mcPoint._y = 95-Math.round(S*94/100);

    mcLighteness.mcArrow._y = 95-Math.round(l*94/100);

    var myColor = new Color(mcNewColor);

    myColor.setRGB(R*256*256+G*256+B);

    myColor = new Color(mcLighteness.mcBg);

    var rgb = hslToRgb(H, S/100, .5);

    myColor.setRGB(Math.round(rgb.r)*256*256+Math.round(rgb.g)*256+Math.round(rgb.b));

    myColor.setRGB("0x"+toHex(rgb.r)+toHex(rgb.g)+toHex(rgb.b));
     }
     updateAfterEvent();
    }
    function toHex(n) {
     n = Math.round(n);
     n = (n.toString(16).length<2 ? "0"+n.toString(16) : n.toString(16)).toUpperCase();
     return n;
    }
    function hslToRgb(H, S, L) {
     var p1, p2;
     var rgb = new Array(3);
     if (L<=0.5) {

    p2 = L*(1+S);
     } else {

    p2 = L+S-(L*S);
     }
     p1 = 2*L-p2;
     if (S == 0) {

    rgb.r = L;

    rgb.g = L;

    rgb.b = L;
     } else {

    rgb.r = toRgb(p1, p2, H+120);

    rgb.g = toRgb(p1, p2, H);

    rgb.b = toRgb(p1, p2, H-120);
     }
     rgb.r *= 255;
     rgb.g *= 255;
     rgb.b *= 255;
     return rgb;
    }
    function toRgb(q1, q2, hue) {
     if (hue>360) {

    hue = hue-360;
     }
     if (hue<0) {

    hue = hue+360;
     }
     if (hue<60) {

    return (q1+(q2-q1)*hue/60);
     } else if (hue<180) {

    return (q2);
     } else if (hue<240) {

    return (q1+(q2-q1)*(240-hue)/60);
     } else {

    return (q1);
     }
    }
    function rgbToHsl(R, G, B) {
     R /= 255;
     G /= 255;
     B /= 255;
     var max, min, diff, r_dist, g_dist, b_dist;
     var hsl = new Array(3);
     max = Math.max(Math.max(R, G), B);
     min = Math.min(Math.min(R, G), B);
     diff = max-min;
     hsl.l = (max+min)/2;
     if (diff == 0) {

    hsl.h = 0;

    hsl.s = 0;
     } else {

    if (hsl.l<0.5) {

     hsl.s = diff/(max+min);

    } else {

     hsl.s = diff/(2-max-min);

    }

    r_dist = (max-R)/diff;

    g_dist = (max-G)/diff;

    b_dist = (max-B)/diff;

    if (R == max) {

     hsl.h = b_dist-g_dist;

    } else if (G == max) {

     hsl.h = 2+r_dist-b_dist;

    } else if (B == max) {

     hsl.h = 4+g_dist-r_dist;

    }

    hsl.h *= 60;

    if (hsl.h<0) {

     hsl.h += 360;

    }

    if (hsl.h>=360) {

     hsl.h -= 360;

    }
     }
     return hsl;
    }

    可生成结果如下:

  • 动态改变MC注册点

    2007-2-06

    // special thanks to Robert Penner (www.robertpenner.com) for providing the
    // original code for this in Actionscrīpt 1 on the FlashCoders mailing list

    dynamic class DynamicRegistration {
     
     private function DynamicRegistration() {
      
     }
     
     public static function initialize(target_mc):Void {
      var p = _global.DynamicRegistration.prototype;
      target_mc.xreg = 0;
      target_mc.yreg = 0;
      target_mc.setRegistration = p.setRegistration;
      target_mc.setPropRel = p.setPropRel;
      with (target_mc) {
       addProperty("_x2", p.get_x2, p.set_x2);
       addProperty("_y2", p.get_y2, p.set_y2);
       addProperty("_xscale2", p.get_xscale2, p.set_xscale2);
       addProperty("_yscale2", p.get_yscale2, p.set_yscale2);
       addProperty("_rotation2", p.get_rotation2, p.set_rotation2);
       addProperty("_xmouse2", p.get_xmouse2, null);
       addProperty("_ymouse2", p.get_ymouse2, null);
      }
     }

     private function setRegistration(x:Number, y:Number):Void {
      this.xreg = x;
      this.yreg = y;
     }
     
     private function get_x2():Number {
      var a = {x:this.xreg, y:this.yreg};
       this.localToGlobal(a);
      this._parent.globalToLocal(a);
       return a.x;
     }
     
     private function set_x2(value:Number):Void {
      var a = {x:this. xreg, y:this. yreg};;
      this.localToGlobal(a);
      this._parent.globalToLocal(a);
      this._x += value - a.x;
     }

     private function get_y2():Number {
      var a = {x:this.xreg, y:this.yreg};
       this.localToGlobal(a);
      this._parent.globalToLocal(a);
       return a.y;
     }
     
     private function set_y2(value:Number):Void {
      var a = {x:this.xreg, y:this.yreg};
      this.localToGlobal(a);
      this._parent.globalToLocal(a);
      this._y += value - a.y;
     }
     
     private function set_xscale2(value:Number):Void {
      this.setPropRel("_xscale", value);
     }
     
     private function get_xscale2():Number {
      return this._xscale;
     }
     
     private function set_yscale2(value:Number):Void {
      this.setPropRel("_yscale", value);
     }
     
     private function get_yscale2():Number {
      return this._yscale;
     }
     
     private function set_rotation2(value:Number):Void {
      this.setPropRel("_rotation", value);
     }
     
     private function get_rotation2():Number {
      return this._rotation;
     }
     
     private function get_xmouse2():Number {
      return this._xmouse - this.xreg;
     }
     
     private function get_ymouse2():Number {
      return this._ymouse - this.yreg;
     }

     private function setPropRel(property:String, amount:Number):Void {
      var a = {x:this.xreg, y:this.yreg};
      this.localToGlobal (a);
      this._parent.globalToLocal (a);
      this[property] = amount;
      var b = {x:this.xreg, y:this.yreg};
      this.localToGlobal (b);
      this._parent.globalToLocal (b);
      this._x -= b.x - a.x;
      this._y -= b.y - a.y;
     }
    }

    用法如下:

    设cc为需动态设定注册点的MC实例名

     DynamicRegistration.initialize(cc);
     cc.setRegistration(50,50);//设置注册点位置为MC的50,50处
    trace("x2"+cc._x2);
    trace("y2"+cc._y2);
    //要读取或设置MC的属性,+2来表示.如x2,y2,rotation2

    原理:即通过某点全局与局部坐标的转换,实际上改变MC的坐标值,来达到类似以某点为注册点的效果。

Open Toolbar