日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | |||||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 | |||
| 13 | 14 | 15 | 16 | 17 | 18 | 19 | |||
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | |||
| 27 | 28 | 29 | 30 | 31 | |||||
搜索标题
统计信息
- 访问量: 795
- 日志数: 11
- flash数: 1
- 建立时间: 2007-02-02
- 更新时间: 2007-03-30
我的最新日志
-
使用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 Chambers和Christian 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=31092。安装软件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 listdynamic 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的坐标值,来达到类似以某点为注册点的效果。






