Archive for AS3知识积累

ActionScript3使用Socket查看邮件介绍pop3命令和相关内容

// March 18th, 2010 // 2 Comments » // AS3知识积累, Flex积累

什么是 POP3
POP3 (Post Office Protocol  3) 即邮局协议的第 3 个版本,它规定怎样将个人计算机连接到 Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,  POP3 允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循 POP3  协议的接收邮件服务器,用来接收电子邮件的。
POP3 命令
POP3 命令包括:
USER username  认证用户名
PASS password 认证密码认证,认证通过则状态转换
APOP name,digest  认可一种安全传输口令的办法,执行成功导致状态转换,请参见 RFC 1321 。
STAT 处理请求 server  回送邮箱统计资料,如邮件数、邮件总字节数
UIDL n 处理 server 返回用于该指定邮件的唯一标识,如果没有指定,返回所有的。
LIST n  处理 server 返回指定邮件的大小等
RETR n 处理 server 返回邮件的全部文本
DELE n 处理 server 标记删除,QUIT  命令执行时才真正删除
RSET 处理撤消所有的 DELE 命令
TOP n,m 处理 返回 n 号邮件的前 m 行内容,m 必须是自然数
NOOP 处理 server 返回一个肯定的响应
QUIT  希望结束会话。如果 server 处于”处理” 状态,则现在进入”更新”状态,删除那些标记成删除的邮件。如果 server 处于”认可”状态,则结束会话时  server 不进入”更新”状态 。
使用 telnet 连接 Winmail Server  收信
例如:安装Winmail  的邮件服务器 IP 是 192.168.0.1(蓝色字体内容由客户端输入,红色字体内容是服务返回的)
telnet 119.119.119.212 110—————————– 使用 telnet 命令连接服务器 110 端口
Trying 119.119.119.212…——————————  正在连接服务器 110 端口
Connected to 119.119.119.212.————————– 连接服务器 110 端口成功
+OK Winmail  Mail Server POP3 ready
user username—————————————— 输入用户名, username 为具体的用户名
+OK—————————————————-  执行命令成功
pass password—————————————— 输入用户密码,password 为具体的密码
+OK 2 messages—————————————–  密码认证通过
(-ERR authorization failed—————————– 密码认证失败)
stat————————————————— 邮箱状态
+OK 2 6415——————————————— 2  为该信箱总邮件数,6415 为总字节数
list————————————————— 列出每封邮件的字节数
+OK—————————————————-  执行命令成功,开始显示,左边为邮件的序号,右边为该邮件的大小
1 537————————————————– 第 1 封邮件,大小为 537 字节
2 5878————————————————- 第  2 封邮件,大小为 5878 字节
.
top  1————————————————– 接收第 1 封邮件
+OK—————————————————-  接收成功, 返回第 1 封邮件头
Return-Path:  <test1@look.com>
Delivered-To: test2@look.com
Received: (winmail  server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800
From:  test1@look.com
To: test2@look.com
Date: Mon, 25 Oct 2004 14:24:27  +0800
Subject: test mail
.
retr 1————————————————-  接收第 1 封邮件
+OK—————————————————- 接收成功, 返回第 1 封邮件全部内容
Return-Path:  <test1@look.com>
Delivered-To: test2@look.com
Received: (winmail  server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800
From:  test1@look.com
To: test2@look.com
Date: Mon, 25 Oct 2004 14:24:27  +0800
Subject: test mail
Hi, test2
This is a test mail, you don’t  reply it.
.
dele 1————————————————- 删除第 1 封邮件
+OK—————————————————-  删除成功
dele 2————————————————- 删除第 2 封邮件
+OK—————————————————-  删除成功
quit————————————————— 结束会话
+OK—————————————————-  执行命令成功

ActionScript3使用Socket查看邮件介绍pop3命令和相关内容
什么是 POP3POP3 (Post Office Protocol  3) 即邮局协议的第 3 个版本,它规定怎样将个人计算机连接到 Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,  POP3 允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循 POP3  协议的接收邮件服务器,用来接收电子邮件的。
POP3 命令POP3 命令包括:USER username  认证用户名PASS password 认证密码认证,认证通过则状态转换APOP name,digest  认可一种安全传输口令的办法,执行成功导致状态转换,请参见 RFC 1321 。STAT 处理请求 server  回送邮箱统计资料,如邮件数、邮件总字节数UIDL n 处理 server 返回用于该指定邮件的唯一标识,如果没有指定,返回所有的。LIST n  处理 server 返回指定邮件的大小等RETR n 处理 server 返回邮件的全部文本DELE n 处理 server 标记删除,QUIT  命令执行时才真正删除RSET 处理撤消所有的 DELE 命令TOP n,m 处理 返回 n 号邮件的前 m 行内容,m 必须是自然数NOOP 处理 server 返回一个肯定的响应QUIT  希望结束会话。如果 server 处于”处理” 状态,则现在进入”更新”状态,删除那些标记成删除的邮件。如果 server 处于”认可”状态,则结束会话时  server 不进入”更新”状态 。
使用 telnet 连接 Winmail Server  收信例如:安装Winmail  的邮件服务器 IP 是 192.168.0.1(蓝色字体内容由客户端输入,红色字体内容是服务返回的)
telnet 119.119.119.212 110—————————– 使用 telnet 命令连接服务器 110 端口Trying 119.119.119.212…——————————  正在连接服务器 110 端口Connected to 119.119.119.212.————————– 连接服务器 110 端口成功+OK Winmail  Mail Server POP3 readyuser username—————————————— 输入用户名, username 为具体的用户名+OK—————————————————-  执行命令成功pass password—————————————— 输入用户密码,password 为具体的密码+OK 2 messages—————————————–  密码认证通过(-ERR authorization failed—————————– 密码认证失败)stat————————————————— 邮箱状态+OK 2 6415——————————————— 2  为该信箱总邮件数,6415 为总字节数list————————————————— 列出每封邮件的字节数+OK—————————————————-  执行命令成功,开始显示,左边为邮件的序号,右边为该邮件的大小1 537————————————————– 第 1 封邮件,大小为 537 字节2 5878————————————————- 第  2 封邮件,大小为 5878 字节.top  1————————————————– 接收第 1 封邮件+OK—————————————————-  接收成功, 返回第 1 封邮件头Return-Path:  <test1@look.com>Delivered-To: test2@look.comReceived: (winmail  server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800From:  test1@look.comTo: test2@look.comDate: Mon, 25 Oct 2004 14:24:27  +0800Subject: test mail.retr 1————————————————-  接收第 1 封邮件+OK—————————————————- 接收成功, 返回第 1 封邮件全部内容Return-Path:  <test1@look.com>Delivered-To: test2@look.comReceived: (winmail  server invoked for smtp delivery); Mon, 25 Oct 2004 14:24:27 +0800From:  test1@look.comTo: test2@look.comDate: Mon, 25 Oct 2004 14:24:27  +0800Subject: test mail
Hi, test2This is a test mail, you don’t  reply it.
.dele 1————————————————- 删除第 1 封邮件+OK—————————————————-  删除成功dele 2————————————————- 删除第 2 封邮件+OK—————————————————-  删除成功quit————————————————— 结束会话+OK—————————————————-  执行命令成功

AS3及Flex的百条常用知识(二)

// February 11th, 2010 // No Comments » // AS3知识积累, Flex积累

【自动大小调整和对齐】
TextField.autoSize = TextFieldAutoSize.LEFT;
可选之值:
flash.text.TextFieldAutoSize.CENTER
flash.text.TextFieldAutoSize.LEFT
flash.text.TextFieldAutoSize.NONE
flash.text.TextFieldAutoSize.RIGHT

【指示文本字段是否自动换行】
TextField.wordWrap = true; //自动换行

【用程序手段滚动文字】
水平方向以像素为单位,而垂直方向以行做单位:
scrollV: 指出文字框可见区域的最顶行,可读写;
bottomScrollV: 指出文字框内最底端可见行,只读;
maxScrollV: scrollV的最大值,只读;
numLines: 定义多行文本字段中的文本行数,只读;
TextField.scrollV = field.maxScrollV; //滚动到最后一页

【响应滚动事件】
field.addEventListener(Event.SCROLL, onTextScroll);

【样式化文字的方法】
1. 使用HTML标签进行样式化;
2. 使用TextFormat对象;
3. 使用CSS.
例如: HTML是用<font>标签,TextFormat对象是设定font属性,而CSS是使用font-family属性的.
受支持的层叠样式表(CSS)属性和值,及其相应的ActionScript属性名称(小括号内):
color(color),display(display),font-family(fontFamily),font-size(fontSize),font-style(fontStyle),font-weight(fontWeight),kerning(kerning),leading(leading),letter-spacing(letterSpacing),margin-left(marginLeft),margin-right(marginRight),text-align(textAlign),text-decoration(textDecoration),text-indent(textIndent)
受支持的HTML实体: <(小于号: <), >(大于号: >), &(和: &), “(双引号: “), ‘(撇号,单引号: ‘)
其中样式对象的两种写法:
写法一:
var sampleStyle.:Object = new Object();
sampleStyle.color = “#FFFFFF”;
sampleStyle.textAlign = “center”;
css.setStyle(“.sample”, sampleStyle);
写法二:
var sampleStyle.:Object = {color: “#FFFFFF”, textAlign: “center”};
css.setStyle(“.sample”, sampleStyle);

【对用户输入的文字进行样式化】
使用defaultTextFormat属性,样式会施加至用户键入输入框的文字身上:
var formatter:TextFormat = new TextFormat();
formatter.color = 0x0000FF; //把文字变成蓝色
field.defaultTextFormat = formatter;

【对现有文字的一部分进行样式化】
TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void

【设定文字框的字体】
例子:
HTML: field.htmlText = “<font face=’Arial’>Formatted text</font>”;
TextFormat: formatter.font = “Arial”;
CSS: P{ font-family: Arial; }
也可以使用以逗号隔开的字体清单: formatter.font = “Arial, Verdana, Helvetica”;
注意:
字体和字体群组不同.字体群组有三种: _sans,_serif以及_typewriter.
_sans群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier New这种字体.

【嵌入字体】
使用[Embed]后设标签.[Embed]后设标签应该出现在ActionScript文件中,处于类宣告之外.你可以内嵌TrueType字体或系统字体.内嵌TrueType字体时的语法:
[Embed(source="pathToTtfFile", fontName="FontName", mimeType="application/x-font-truetype")]
pathToTtfFile: ttf文件的路径,TrueType字体的路径可以是相对的,也可以是绝对的;
FontName: 字体名称;
内嵌系统字体的语法:
[Embed(systemFont="Times New Roman", fontName="Times New Roman", mimeType="application/x-font-truetype")]
fontName: 以相同名称作为实际系统字体名称.
注意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替 embedFonts设为true的TextField使用设备字体,什么都不会显示.如果embedFonts设为true,就无法指定以逗号相隔的字体清单.

【建立可以旋转的文字】
使用内嵌字体.当你旋转文字框时,设备字体就会消失.

【显示Unicode文字】
1. 从外部来源载入Unicode文字;
2. 假如你的编辑器支持Unicode(如 Flex Builder),则可以直接在ActionScript程序中使用该字符;
3. 使用Unicode转义字符,ActionScript里所有Unicode转义字符都以\u开头,后面再跟四位十六进制数字.
注意: 如果你想取得Unicode字符,在Windows下使用: 开始>所有程序>附件>系统工具>字符映射表.

【把Flash Player的焦点带给文字框】
stage.focus = field;
把焦点移除:
stage.focus = null;
注意: 当.swf文件首次载入至网页浏览器时,并没有焦点.因此,以程序的方式把焦点指定给Flash应用程序的一个元素前,必须先把焦点移至Flash Player.

【以ActionScript选取文字】
使用TextField.setSelection(beginIndex:int, endIndex:int):void
为了可以正常选取文字,文字框必须具有焦点:
stage.focus = field; //把焦点设给文字框
field.text = “This is example text”; //设定文字
field.setSelection(0, 4); //把”This”这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.

【在文字内设定安插点(游标位置)并访问游标位置的索引值】
可以使用TextField.setSelection()把起始和结尾的索引参数都设成相同值,在文字内设定游标位置(假设具有焦点):
field.setSelection(0, 0); //在第一个字符前摆放安插点
trace(field.caretIndex); //输出游标位置的索引值

【当文本字段受到选取或取消选取时给予响应】
获得焦点时: FocusEvent.FOCUS_IN
失去焦点时: FocusEvent.FOCUS_OUT
通过键盘(Tab键)把焦点移除时: FocusEvent.KEY_FOCUS_CHANGE
通过鼠标把焦点移除时: FocusEvent.MOUSE_FOCUS_CHANGE
FocusEvent 类有一个relatedObject属性.就FOCUS_IN事件而言,relatedObject属性是刚才拥有焦点的对象的引用地址;对于 FOCUS_OUT,KEY_FOCUS_CHANGE以及MOUSE_FOCUS_CHANGE事件,relatedObject属性是刚接收到焦点的对象的引用地址.
FOCUS_IN和FOCUS_OUT事件都是在焦点改变后发生的,所以两者都是不可取消的事件.对于KEY_FOCUS_CHANGE和MOUSE_FOCUS_CHANGE事件,可以使用FocusEvent.preventDefault()方法取消默认行为:
field.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);
private function onKeyFocus(event:FocusEvent):void {
if(field.text == “”) {
event.preventDefault(); //当field没有任何文字前,不允许使用Tab键把焦点移除
}
//event.relatedObject就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址
}

AS3及Flex的百条常用知识

// February 11th, 2010 // 1 Comment » // AS3知识积累, Flex积累

【改变输出swf的尺度,背景颜色或帧频】
在”Navigator”窗框里右键你的项目>选中”Properties”>选中”ActionScript. Compiler”>在”Additional compiler arguments”里输入你所需要的命令
如想改变背景颜色,请输入: -default-background-color 0xffffff

【鼠标坐标】
mouseX mouseY

【检查变量类型并返回布尔值】
is

【检查变量类型并返回类型】
typeof

【检查对象类型并返回该对象】
as

【是数字但不是有效数字问题】
var quantity:Number = 15 – “rabbits”;
trace(typeof quantity); //显示: “number” , 但它是NaN (not a number)
trace(quantity is Number); //true
trace(quantity != NaN); //false
//使用isNaN()函数检测:
isNaN(quantity); //true
//检测变量是否内含有效数字:
!isNaN(quantity); //false

【取消默认的严格编译模式】
在”Navigator”窗框里右键你的项目>选中”Properties”>选中”ActionScript. Compiler”>取消”Enabel compile-time type checking”选项

【基元数据类型和复杂数据类型好比”值类型”和”引用类型”】
基元数据类型类似按值传递:
var intOne:int = 1;
var intTwo:int = 1;
trace(intOne == intTwo); //true

【复杂数据类型类似按引用传递】
var arrayOne:Array = new Array(“a”, “b”);
var arrayTwo:Array = arrayOne;
trace(arrayOne == arrayTwo); //true
//———————————–
var arrayOne:Array = new Array(“a”, “b”);
var arrayTwo:Array = new Array(“a”, “b”);
trace(arrayOne == arrayTwo); //false

【优化逻辑AND(&&)和OR(||)的小知识】
对于逻辑And(&&):
除非条件表达式的前半部分为真,否则,ActionScript不会再去求算逻辑AND运算符的后半部.如果前半部为假,整个条件表达式一定为假,所以再去求算后半部就没效率了.
对于逻辑OR(||):
除非条件表达式前半部为假,否则,ActionScript不会再去求算逻辑OR运算符的后半部,如果前半部为真,整个条件表达式一定为真.
总结:使用逻辑AND(&&)时,把结果最可能为false的表达式放到前面;使用逻辑OR(||)时,把结果最可能为true的表达式放到前面.

【Timer类注意事项】
不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.

【private,protected,internal,public访问权限】
private:只能在类本身内部访问,按惯例,命名私有成员时以下划线”_”开头;
protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线”_”开头;
internal:可以由类本身或者相同包内的任何类访问;
public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.

【一个函数具有未知个数的参数,用arguments对象或”…(rest)”符号访问它的参数】
注意:使用”…(rest)”参数会使 arguments 对象不可用;
private funciton average():void{
trace(arguments.length); //输出参数的个数
// arguments的类型是:object,但可以像访问数组一样去访问它
trace(arguments[1]); //输出第二个参数
}
private function average(…argu):void{
trace(argu[1]); //输出第二个参数,argu参数名是自定义的.
}

【错误处理try,catch,finally】
private function tryError():void{
try {
trace(“测试开始-try”);
throwError();
}catch(errObject:Error) {
trace(“错误信息:” + errObject.message);
trace(“测试结束-catch”);
return;
}finally{
trace(“虽然catch里已经有return方法,但位于return方法后面的finally里的代码依然会被执行.其实无论return方法是在try里,还是catch里,finally里的代码始终会被执行”);
}
trace(“前面已经有return了,此处是不会再执行的.除非没有抛出错误,以使catch里的代码没有被执行”);
}
private function throwError():void{
throw new Error(“抛出错误”);
}

【for…in与for each…in的区别】
与for…in循环不同的是,for each…in循环中的迭代变量包含属性所保存的值,而不包含属性的名称(或主键,索引).

【命名包路径的小技巧】
使用相应于拥有者和相关项目的包名称会比较好.按惯例来讲,包名称的开头应该是逆向的网址名称.例如,如果Example Corp(examplecorp.com)写了一些ActionScript3.0类,就会把所有类放在com.examplecorp包内(或者 com.examplecorp的子包内).如此一来,如果英国有另一家Example Corp(examplecorp.co.uk)也写了一些ActionScript3.0类,只要使用包uk.co.examplecorp,就可确保唯一性.
当类属于特定应用程序的一部分时,就应该放在该应用程序特定的子包内.例如,Example Corp可能有个应用程序名叫WidgetStore.如果WidgetStore应用程序使用一个名为ApplicationManager的类,则此类就应该放在com.examplecorp.widgetstore包内,或者位于该包的子包内.
按惯例来说,包名称的开头是小写字母.

【隐式的取出方法(getter)和设定方法(setter)】
public function get count():uint {
return _count;
}
public function set count(value:uint):uint {
if(value < 100){
_count = value;
}else {
throw Error();
}
}

【确保类是绝不会有子类,使用final】
final public class Example{}

【super关键字的使用】
super(); //父类的构造函数,只能在类实例构造函数内部使用
super.propertyName; //调用父类的属性,属性需要声明为public或protected
super.methodName(); //调用父类的方法,方法需要声明为public或protected

【建立常数,使用关键字const而不是var】
static public const EXAMPLE:String = “example”;

【检测播放器版本】
flash.system.Capabilities.version
对于8.5版以前的任何Flash Player版本,这种方法都不适用.

【判断客户端系统】
flash.system.Capabilities.os

【检测播放器类型】
flash.system.Capabilities.playerType
可能的值有:
“StandAlone”,用于独立的 Flash Player
“External”,用于外部的 Flash Player 或处于测试模式下
“PlugIn”,用于 Flash Player 浏览器插件
“ActiveX”,用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件

【检测系统语言】
flash.system.Capabilities.language

【判断用户是否启用了IME(输入法编辑器)】
flash.system.IME.enabled

【检测屏幕的分辨率】
flash.system.Capabilities.screenResolutionX
flash.system.Capabilities.screenResolutionY

【把弹出窗口居中的算法】
X = (舞台宽/2)-(窗口宽/2)
Y = (舞台高/2)-(窗口高/2)

【控制影片配合Player的方式,包括缩放问题】
stage.scaleMode
可供选择值:flash.display.StageScaleMode

【舞台的对齐方式】
stage.align
可供选择值:flash.display.StageAlign

【隐藏Flash Player的右键菜单】
stage.showDefaultContextMenu = false;

【检测系统是否具有音频功能】
flash.system.Capabilities.hasAudio

【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】
flash.system.Capabilities.hasMP3

【检测播放器能 (true) 还是不能 (false) 播放流式视频】
flash.system.Capabilities.hasStreamingVideo

【检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行】
flash.system.Capabilities.hasEmbeddedVideo

【检测播放器能 (true) 还是不能 (false) 对视频流(如来自 Web 摄像头的视频流)进行编码】
flash.system.Capabilities.hasVideoEncoder

【显示 Flash Player 中的”安全设置”面板】
flash.system.Security.showSettings();
可供选择项:flash.system.SecurityPanel

【让其它域的.swf访问本域的.swf】
在本域的.swf文件里加上:flash.system.Security.allowDomain()
或者使用安全策略文件”crossdomain.xml”.在Flash 8以前,这个文件必须放在.swf所在域的根目录,现在,你可以使用flash.system.Security.loadPolicyFile(),指定安全策略文件所在的位置.拒绝任何域的做法是在<cross-domain-policy>标签内什么也不填,安全策略文件也支持通用字符 “*”:
<?xml version=”1.0″?>
<!– http://www.mydomain.com/crossdomain.xml –>
<cross-domain-policy>
<allow-access-from domain=”www.riahome.cn ” />
<allow-access-from domain=”*.Y-boy.cn” />
<allow-access-from domain=”210.38.196.48″ />
<allow-access-from domain=”*” />
</cross-domain-policy>

【数字的不同进制之间的转换】
parseInt(str:String, radix:uint = 0):Number 返回十进制的数,参数radix表示要分析的数字的基数.如果省略radix,就默认为10,除非字符串的开头是”0x”,”0X”或”0″:
trace(parseInt(“0×12″)); //设定radix为16,输出:18
trace(parseInt(“017″)); //设定radix为8,输出:15
或者使用Number,uint和int对象的toString(radix)方法.

【使用Math.round()对一个数取整,四舍五入】
Math.round()
trace(Math.round(204.499)); //输出:204
trace(Math.round(401.5)); //输出:402

【使用Math.floor()对一个数向下取整,就是只要整数部分而不理会小数分】
trace(Math.floor(204.99)); //输出:204

【使用Math.ceil()对一个数向上取整,只要小数部分不为零,整数部分就加1】
trace(Math.ceil(401.01)); //输出:402

【产生一个随机数】
使用Math.random()产生一个伪随机数n,其中 0 <= n < 1

【把数字取至最近的小数点位,即指定精确度】
1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;
2. 让输入值除以步骤1所选的数字(此例为0.01);
3. 使用Math.round()把步骤2所计得的值取成最近的整数;
4. 把步骤3所得的结果乘以步骤2用于除法的那个值.
例如,要把90.337取成两个小数点位数,可以使用:
trace(Math.round(90.337/0.01)*0.01); //输出:90.34

【把数字取成一个整数的最接近倍数值】
例1,这样会把92.5取成5的最近倍数值:
trace(Math.round(92.5/5)*5); //输出:95
例2,这样会把92.5取成10的最近倍数值:
trace(Math.round(92.5/10)*10); //输出:90

【在指定数值范围内获得随机数】
//可取范围:[min, max]
private function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max – min + 1)) + min;
return randomNum;
}
应用例子:
模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);
模拟投骰子,即希望得到随机六个值: randRange(1, 6);
为避免被缓存而需要产生一个独一无二的数字追加在URL尾端,通常最佳方法是取得当前毫秒数.

【弧度(radian)与度数(degree)之间的转换】
从弧度转为度数: degrees = radians * 180 / Math.PI
从度数转为弧度: radians = degrees * Math.PI / 180

【计算两点之间的距离】
勾股定理: c2 = a2 + b2
假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:
var c:Number = Math.sqrt(Math.pow(mc1.x – mc2.x, 2) + Math.pow(mc1.y – mc2.y, 2));

【模拟圆周运动】
已知圆心o(x0, y0),半径r和弧度angle,求圆上任意一点P(x, y)的坐标:
x = x0 + (Math.cos(angle) * r);
y = y0 + (Math.sin(angle) * r);
注意:舞台的x轴正方向水平向右,y轴正方向垂直向下.

【模拟椭圆运动】
已知圆心o(x0, y0),长轴a,短轴b以及弧度angle,求圆上任意一点P(x, y)的坐标:
x = x0 + (Math.cos(angle) * a);
y = y0 + (Math.sin(angle) * b);

【华氏温度和摄氏温度之间的转换】
华氏温度 = 摄氏度数 * 9 / 5 + 32
摄氏温度 = (华氏度数 – 32) * 5 /9

【公斤与磅之间的转换】
公斤 = 磅 * 2.2
磅 = 公斤 / 2.2

【向数组尾端添加元素】
var array:Array = new Array();
array.push(“a”, “b”);
//向数组尾端添加单一元素也可以这样:
array[array.length] = “c”;
//如果以索引设定的元素不存在,数组本身会自动扩展以包含足够的元素数目.介于中间的元素会被设为undefined:
array[5] = “e”;
trace(array[4]); //输出: undefined

【向数组开端添加元素】
var array:Array = ["a", "b"];
array.unshift(“c”, “d”);
trace(array); //输出: c,d,a,b

【删除数组中第一个元素并返回该元素,使用shift()方法】
var letters:Array = new Array(“a”, “b”, “c”);
var firstLetter:String = letters.shift();
trace(letters); //输出: b,c
trace(firstLetter); //输出: a

【删除数组中最后一个元素并返回该元素的值,使用pop()方法】
var letters:Array = new Array(“a”, “b”, “c”);
trace(letters); //输出: a,b,c
var letter:String = letters.pop();
trace(letters); //输出: a,b
trace(letter); //输出: c

【删除数组中的元素,给数组添加新元素并返回删除的元素,使用splice()方法】
splice(startIndex:int, deleteCount:uint, … values):Array
startIndex: 一个整数,它指定数组中开始进行插入或删除的位置处的元素的索引;
deleteCount: 一个整数,它指定要删除的元素数量;
… values: 用逗号分隔的一个或多个值的可选列表或数组,此列表或数组将插入到此数组中由 startIndex 参数指定的位置.

【查找数组中第一个相匹配的元素】
var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = “b”;
for(var i:int = 0; i < array.length; i++) {
if(array[i] == match) {
trace(“Element with index ” + i + ” found to match ” + match);
//输出: Element with index 1 found to match b
break;
}
}

【查找数组中最后一个相匹配的元素】
var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = “b”;
for(var i:int = array.length – 1; i >= 0; i–) {
if(array[i] == match) {
trace(“Element with index ” + i + ” found to match ” + match);
//输出: Element with index 5 found to match b
break;
}
}

【把字符串转成数组】
使用String.split()方法:
var list:String = “I am YoungBoy.”;
var words:Array = list.split(” “); //以空格作为分隔符将字符串切割
trace(words); //输出: I,am,YoungBoy.

【把数组转成字符串】
使用String.join()方法:
var myArr:Array = new Array(“one”, “two”, “three”);
var myStr:String = myArr.join(” and “);
trace(myArr); //输出: one,two,three
trace(myStr); //输出: one and two and three

【使用对象数组处理相关数据】
var cars:Array = new Array();
cars.push({make:”Mike”, year:1997, color:”blue”});
cars.push({make:”Kelly”, year:1986, color:”red”});
for(var i:int = 0; i < cars.length; i++) {
trace(cars[i].make + ” – ” + cars[i].year + ” – ” + cars[i].color);
}
//输出:
// Mike – 1997 – blue
// Kelly – 1986 – red

【在数组中获取最小或最大值】
var scores:Array = [10, 4, 15, 8];
scores.sort(Array.NUMERIC);
trace(“Minimum: ” + scores[0]);
trace(“Maximum: ” + scores[scores.length - 1]);

【使用for … in语句读取关联数组元素】
var myObject:Object = new Object();
myObject.name = “YoungBoy”;
myObject.age = 20;
for(var i:String in myObject) {
trace(i + “: ” + myObject[i]);
}
//输出: name: YoungBoy
// age: 20
注意: for … in循环不会显示对象所有的内建属性.例如,循环会显示执行期间新增的特殊属性,但是,不会列出内建对象的方法,即使都是储存在对象属性内.

【AVM(ActionScript. Virtual Machine,虚拟机)和渲染引擎(Rendering Engine)】
AVM负责执行ActionScript程序,而渲染引擎则是把对象绘制在显示器上.

【指出容器的显示清单中有多少显示对象】
每个容器都有numChildren属性.

【把项目新增至显示清单】
addChild(child:DisplayObject)
addChildAt(child:DisplayObject, index:int)
index: 添加该子项的索引位置.如果指定当前占用的索引位置,则该位置以及所有更高位置上的子对象会在子级列表中上移一个位置.

【从显示清单中移除项目】
removeChild(child:DisplayObject)
removeChildAt(index:int)
index: 要删除的 DisplayObject 的子索引,该子项之上的任何显示对象的索引位置都减去1.
如果想移除窗口所有子元件,可以结合removeChildAt(),numChildren属性以及for循环.因为每次一个子元件被移除时,索引位置都会变化,所以,有两种方法可以处理所有子元件的移除:
1. 总是移除位置0的子元件;
2. 倒过来移除子元件,也就是从尾端开始.

【更改现有子项在显示对象容器中的位置】
setChildIndex(child:DisplayObject, index:int):void
可能用到的方法:
返回 DisplayObject 的 child 实例的索引位置: getChildIndex(child:DisplayObject):int
返回位于指定索引处的子显示对象实例: getChildAt(index:int):DisplayObject
注意: 当子元件移到低于它现在所在位置的索引时,那么,从标的索引起,直到子元件索引前面的那个索引的所有子元件都会令其索引增加1,而该子元件就会指定至标的索引.当子元件移到较高索引时,从该子元件索引之上的那个索引起,直到标的索引的所有子元件都会令其索引往下减1,而该子元件就会指定至标的索引值.

【关于TextField以垂直方式把文字摆在按钮表面中心点的小技巧】
textField.y = (_height – textField.textHeight) / 2;
textField.y -= 2; //减2个像素以调整偏移量

【外部.swf影片载入和互动】
1. 监听init事件;
2. 透过content属性存取所载入的影片.
当所载入的影片做好足够的初始化工作,使其方法和属性可以接受互动时,init事件就会被发起.只有在载入器发起init事件后,才能控制影片.所载入的影片还没初始化就试着与它互动,是会产生执行期间错误的.
_loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit); //当载入的.swf的属性和方法可用时
_loader.load(new URLRequest(“ExternalMovie.swf”));
private function handleInit(event:Event):void {
var movie:* = _loader.content;
trace(movie.getColor());
movie.setColor(0xFF0000);
}

【TextField有两种类型:动态(dynamic)和输入(input),默认值为动态.改变TextField类型方法】
field.type = TextFieldType.INPUT; //selectable属性默认值为true
flash.text.TextFieldType.INPUT和flash.text.TextFieldType.DYNAMIC

【过滤文字输入】
TextField.restrict = “此处为可输入的内容”;
field.restrict = “^此处为禁止输入的内容”;
restrict属性支持一些类似正则表达式的样式:
field.restrict = “a-zA-z”; //只允许大小字母
field.restrict = “a-zA-z “; //只允许字母和空格
field.restrict = “0-9″; //只允许数字
field.restrict = “^abcdefg”; //除了小写字母abcdefg不允许外,其它都允许
field.restrict = “^a-z”; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母
field.restrict = “0-9^5″; //只允许数字,但5例外
让restrict字符包含具有特殊意义的字母(例如-和^):
field.restrict = “0-9\\-”; //允许数字和破折号
field.restrict = “0-9\\^”; //允许数字和^
field.restrict = “0-9\\\\”; //允许数字和反斜杠
你也可以使用Unicode转义序列,指定允许的内容.例如:
field.restrict = “^\u001A”;
注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.

【设定输入框的最大长度】
TextField.maxChars:int

【向TextField追加内容】
TextField.appendText(text:String):void
与通过对 text 属性使用加法赋值来连接两个字符串(例如 field.text += moreText)相比,此方法的效率更高.

【显示HTML格式的文字】
TextField.htmlText = “<b>Html text</b>”;
支持的HTML标签集有: <b>,<i>,<u>,<font>(有face,size以及color属性),< p>,<br>,<a>,<li>,<img>以及<textformat>(有 leftmargin,rightmargin,blockindent,indent,leading以及tabstops属性,相应于 TextFormat类的同名属性)

【缩减空白】
TextField.condenseWhite = true;
删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.
注意: 在设置 htmlText 属性之前设置 condenseWhite 属性

AS3及Flex的百条常用知识

JavaScript与ActionScript3交互

// January 24th, 2010 // No Comments » // AS3知识积累, javascript and CSS

TestData.as

package {
import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.utils.Timer;
import flash.external.ExternalInterface;

public class TestDate extends Sprite
{

private var i:int=0;
private var timer:Timer=new Timer(1000,60);

internal var jsReady:Boolean;
internal var aa:String =”hi”;
private var output:TextField=new TextField();
public function TestDate()
{
this.addChild(this.output);
this.timer.addEventListener(TimerEvent.TIMER,timerHandler);
this.timer.start();
this.output.appendText(‘开始时间’+”\n”);
this.output.autoSize=’12px’;

}

private function timerHandler(event:TimerEvent):void{

jsReady = new Boolean(ExternalInterface.call(“JSReady”,aa));
this.output.appendText(“runing:”+(i++)+”\n”);
if(jsReady){
ExternalInterface.addCallback(“sayHello”,sayHello);
ExternalInterface.call(“setSwfReady”,true);
if(ExternalInterface.available)ExternalInterface.call(“callAS”,”");
this.timer.stop();
}
}

public function sayHello(txt:String):void{
this.output.appendText(“JS: “+txt+”\n”);
}
}
}

javascript

<script language="JavaScript" type="text/javascript">
var jsReady=false;
var swfReady=false;
function atReady(){
jsReady=true;
}

function JSReady(){
return jsReady;
}
function setSwfReady(ready){
swfReady=ready;
}

function callAS(){
if(swfReady){
TestDate.sayHello(“Hello,World”);
}
}

function show(str){
document.getElementById(“show”).innerHTML=”test:”+str;
}

</script>

Flash读取XML小程序,今天自己写了一个

// April 25th, 2008 // No Comments » // AS3知识积累

根据HTML中传递的变量来载入不同的XML文档,
HTML中代码!!

  1. <script language="javascript">AC_FL_RunContent = 0;</script>
  2. <script src="AC_RunActiveContent.js" language="javascript"></script>
  3.         <script language="javascript">
  4. if (AC_FL_RunContent == 0) {
  5. alert("このページでは \"AC_RunActiveContent.js\" が必要です。");
  6. } else {
  7. AC_FL_RunContent(
  8. 'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
  9. 'width', '725',
  10. 'height', '325',
  11. 'src', 'photo',
  12. 'quality', 'high',
  13. 'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
  14. 'align', 'middle',
  15. 'play', 'true',
  16. 'loop', 'true',
  17. 'scale', 'noscale',
  18. 'wmode', 'transparent',
  19. 'devicefont', 'false',
  20. 'id', 'photo',
  21. 'bgcolor', '#ffffff',
  22. 'name', 'photo',
  23. 'menu', 'true',
  24. 'allowFullScreen', 'false',
  25. 'allowScriptAccess','sameDomain',
  26. 'movie', 'photo',
  27. 'FlashVars', 'firstName=bannerXml1.xml',
  28. 'salign', 't '
  29. ); //end AC code
  30. }
  31.  
  32. </script>
  33. <noscript>
  34. <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="725" height="325" id="photo" align="middle">
  35. <param name="allowScriptAccess" value="sameDomain" />
  36. <param name="allowFullScreen" value="false" />
  37. <param name="FlashVars" value="firstName=bannerXml1.xml" />
  38. <param name="movie" value="photo.swf" /><param name="quality" value="high" /><param name="salign" value="t" /><param name="scale" value="noscale" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#ffffff" /> <embed src="photo.swf" quality="high" scale="noscale" salign="t" wmode="transparent" bgcolor="#ffffff" width="725" height="350" name="photo" align="middle" allowscriptaccess="sameDomain" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
  39. </object>
  40. </noscript>

FLASH中代码!

  1. import flash.events.*;
  2. import flash.net.*;
  3.  
  4. var loader:URLLoader;
  5. var p_i:int=0;
  6. var dArray:Dictionary=new Dictionary();
  7. var progressline:int;
  8. function loadXml(urlXml:String):void{
  9.  
  10. this.loader=new URLLoader();
  11. this.loader.addEventListener(Event.COMPLETE,dataLoaded);
  12. this.loader.addEventListener(IOErrorEvent.IO_ERROR,dataLoadIOErr);
  13. this.loader.load(new URLRequest(urlXml));
  14. progressline=meter.width;
  15. meter.width=0;
  16. }
  17.  
  18. function dataLoaded(evt:Event):void{
  19. var dataXml:XML = new XML(loader.data);
  20. var i:int=0;
  21. var x_i:int=0;
  22. var y_i:int=0;
  23. for each (var image:XML in dataXml..image) {
  24. var loader_obj : Loader= new Loader();
  25. var info : LoaderInfo  = loader_obj.contentLoaderInfo;
  26. info.addEventListener (Event.OPEN,LoaderInfoOpenFunc);
  27. info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc);
  28. info.addEventListener (Event.INIT,LoaderInfoInitFunc)
  29. info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
  30. info.addEventListener (IOErrorEvent.IO_ERROR,LoaderInfoIOErrorFunc);
  31.  
  32. var url1 : URLRequest = new URLRequest(image.@thmb.toString());
  33. loader_obj.addEventListener(MouseEvent.CLICK,onClickImage);
  34. dArray[loader_obj]=image;
  35. loader_obj.load(url1);
  36. loader_obj.x=121*x_i
  37. loader_obj.y=23*y_i+3;
  38. trace(loader_obj.x);
  39. stage.addChild (loader_obj);
  40. x_i++;
  41. if(x_i&gt;5){
  42. y_i++;
  43. x_i=0;
  44. }
  45. }
  46. }
  47.  
  48. function dataLoadIOErr(evt:IOErrorEvent):void{
  49. trace(evt);
  50. }
  51.  
  52. function onClickImage(event:Event):void{
  53. trace(event.target);
  54.  
  55. var request:URLRequest = new URLRequest();
  56. request.url=dArray[event.target].@url.toString();
  57. try {
  58. navigateToURL(request, "_self");
  59. }catch (e:Error) {
  60. trace(e);
  61. }
  62. }
  63.  
  64. function LoaderInfoOpenFunc (event : Event) {
  65. trace ("読み込みを開始した");
  66. }
  67.  
  68. function LoaderInfoProgressFunc (event : ProgressEvent) {
  69. trace ("読込:" + event.bytesLoaded);
  70. trace ("全体:" + event.bytesTotal);
  71. trace ("パーセント:" + Math.floor(event.bytesLoaded/event.bytesTotal*progressline));
  72. meter.width = event.bytesLoaded/event.bytesTotal*progressline;
  73. }
  74.  
  75. ;
  76. function LoaderInfoInitFunc (event : Event) {
  77. trace ("読み込んだコンテンツの初期化が行われプロパティにアクセス可能");
  78. }
  79.  
  80. function LoaderInfoCompleteFunc (event : Event) {
  81. trace ("読み込みを完了");
  82. }
  83.  
  84. function LoaderInfoIOErrorFunc (event : IOErrorEvent) {
  85. trace ("ファイル入出力のエラー");
  86. }
  87. var flashVars=loaderInfo.parameters;
  88.  
  89. loadXml('flashBannerDataXml/'+flashVars.firstName);

AS3类:实现AIR应用的自动更新

// April 20th, 2008 // No Comments » // AS3知识积累, Flex积累

package Neo{
import flash.display.*;
import flash.filesystem.*;
import flash.desktop.Updater;
import flash.events.*;
import flash.net.*;
import flash.xml.*;
import flash.text.TextField;
import flash.utils.ByteArray;
import flash.events.IOErrorEvent;
public class AIRUpdater extends Sprite {
public var version:String;
public var updataURL:String;
private var updataRequest:URLRequest;
private var updataLoader=new URLLoader();
private var newVersion:String;
private var airURLString:String;
private var urlReq:URLRequest;
private var urlStream:URLStream;
private var fileData:ByteArray;
private var baseSprite:Sprite=new Sprite();
private var tipText:TextField=new TextField();
private var btYes:Sprite=new Sprite();
private var btYesText:TextField=new TextField();
private var btNo:Sprite=new Sprite();
private var btNoText:TextField=new TextField();
public function AIRUpdater():void {
baseSprite.graphics.beginFill(0×000000,0.5);
baseSprite.graphics.lineStyle(8,0×000000,0.1);
baseSprite.graphics.drawRoundRect(0,0,360,160,10);
baseSprite.graphics.endFill();
/*add base*/
tipText.width=300;
tipText.height=30;
tipText.x=tipText.y=30;
tipText.autoSize=”center”;
tipText.textColor=0xFFFFFF;
tipText.text=”You must update your AIR Application now,ok?”;
baseSprite.addChild(tipText);
/*add button*/
btYes.graphics.beginFill(0×000000,0.5);
btYes.graphics.lineStyle(1,0×000000,0.1);
btYes.graphics.drawRoundRect(0,0,36,20,10);
btYes.graphics.endFill();
btYesText.width=36;
btYesText.text=”Yes”;
btYesText.autoSize=”center”;
btYesText.textColor=0xFFFFFF;
btYes.addChild(btYesText);
btNo.graphics.beginFill(0×000000,0.5);
btNo.graphics.lineStyle(1,0×000000,0.1);
btNo.graphics.drawRoundRect(0,0,36,20,10);
btNo.graphics.endFill();
btNoText.width=36;
btNoText.text=”No”;
btNoText.autoSize=”center”;
btNoText.textColor=0xFFFFFF;
btNoText.selectable=btYesText.selectable=false;
btNo.addChild(btNoText);
btYes.x=100;
btYes.y=100;
btNo.x=210;
btNo.y=100;
btYes.buttonMode=btNo.buttonMode=true;
baseSprite.addChild(btYes);
baseSprite.addChild(btNo);
}
/*Function For Update Application*/
public function updateMyApp():void {
updataRequest=new URLRequest(updataURL);
updataLoader.load(updataRequest);
updataLoader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
updataLoader.addEventListener(Event.COMPLETE,loaderCompleteHandler);
}
/*loaderCompleteHandler*/
function loaderCompleteHandler(event:Event):void {
try {
var result:XML=new XML(updataLoader.data);
if (version != result.version) {
newVersion=result.version;
airURLString=result.lastpublic;
trace(”马上更新到最新版吗?” + “有新的更新”);
addChild(baseSprite);
baseSprite.x=(stage.stageWidth-baseSprite.width)/2;
baseSprite.y=(stage.stageHeight-baseSprite.height)/2;
btYes.addEventListener(MouseEvent.CLICK,updateBtHandler);
btNo.addEventListener(MouseEvent.CLICK,removeBtHandler);
}
} catch (e:TypeError) {
trace(”Updata Application Error:Could not parse the XML file.”);
}
}
/*errorHandler*/
private function errorHandler(e:IOErrorEvent):void {
trace(”Updata Application Error:Had problem loading the XML File.”);
}
private function updateBtHandler(event:MouseEvent):void {
urlReq=new URLRequest(airURLString);
urlStream=new URLStream ;
fileData=new ByteArray ;
urlStream.addEventListener(Event.COMPLETE,loaded);
urlStream.load(urlReq);
}
private function removeBtHandler(event:MouseEvent):void {
removeChild(baseSprite);
}
private function loaded(event:Event):void {
urlStream.readBytes(fileData,0,urlStream.bytesAvailable);
writeAirFile();
}
private function writeAirFile():void {
var file:File=File.desktopDirectory.resolvePath(”lastPublish.air”);
var fileStream:FileStream=new FileStream ;
fileStream.addEventListener(Event.CLOSE,fileClosed);
fileStream.openAsync(file,FileMode.WRITE);
fileStream.writeBytes(fileData,0,fileData.length);
fileStream.close();
}
private function fileClosed(event:Event):void {
trace(”The AIR file is written.”);
var updater:Updater=new Updater ;
var airFile:File=File.desktopDirectory.resolvePath(”lastPublish.air”);
updater.update(airFile,newVersion);
}
}
}

调用示例:

import flash.display.*;
import flash.filesystem.*;
import flash.desktop.Updater;
import flash.events.*;
import flash.net.*;
import flash.xml.*;
import flash.utils.ByteArray;
import flash.events.IOErrorEvent;
import Neo.AIRUpdater;
var aupSample:AIRUpdater=new AIRUpdater();
aupSample.version=”alpha1″;
aupSample.updataURL=”http://localhost/testUpdate/version.xml”;
aupSample.updateMyApp();
addChild(aupSample);

用于判断版本的XML结构示意:

<?xml version=”1.0″ encoding=”utf-8″?>
<example>
<version>alpha2</version>
<lastpublic>http://localhost/testUpdate/main.air</lastpublic>
</example>

Cairngorm框架入门介绍

// April 18th, 2008 // 1 Comment » // AS3知识积累, Flex积累

Cairngorm是Iteration::two的开源项目, 现在已经被Adobe收购,是使用Flex的RIA开发的最佳实践(best-practice)框架.详情可以访问Adobe的lab (http://labs.adobe.com/wiki/index.php/Cairngorm)。

在Cairngorm基础上开发RIA, 将会在大大提高开发和维护的效率。. (more…)

Flex如何在组件中调用父级变量和函数

// March 31st, 2008 // No Comments » // AS3知识积累

flex如何在组件中调用父级函数
(this.parent as 父级类型).父级变量;
父级类型即父级mxml的名称
这种方法适合使用addchild添加的子级,如果是使用的PopUpManager的方法,
需要使用this.parentApplication.父级变量

air窗口动画ico放到托盘显示

// February 28th, 2008 // No Comments » // AS3知识积累

 前述のとおり、ベータ2からシステムトレイにアイコンを表示できるようになりました。

これにより、システムトレイにアプリケーションの状態を示したり、システムトレイアイコンからメニューを開いてアプリケーションの操作を行ったりすることができるようになります(*注意:システムトレイアイコン表示については、Windowsのみの対応機能です。ほぼ同じような方法でMac OSXのDockIconへのアイコン表示も行えるようですが、今回は解説しません。ご了承ください)。

(more…)

Parallel在同一个时间一起起反应,同时运动

// February 21st, 2008 // No Comments » // AS3知识积累

package com
{
import mx.collections.ArrayCollection;
import mx.effects.Parallel;

public class EventArray
{
private var par:Parallel;
public function EventArray(array:ArrayCollection){
par=new Parallel();
setup(array);
}
private function setup(array:ArrayCollection):void{
for(var i:int=0;i<array.length;i++){
this.par.addChild(array[i]);
}
}
public function runAn():void{
this.par.play();
}

}
}

PHP AND AS3 AND session

// January 7th, 2008 // No Comments » // AS3知识积累, PHP知识累计

PHP CODE
$cookieArray = array(”value1″=>$cookie1,”sid”=>session_id());

I then have an invisable text line in the flex app named sid, so in flex I put this in the code,

AS3 Code
sid.text = cookieArray[0][’sid’];

then when I call on the upload script I used this.

AS3 Code
var endpoint:String = “pathToUploadScript.php?sid=” + sid.text;

Then on the upload script page i added this to the top, just under the session_start();

PHP CODE
if(isset($_GET[’sid’])){
session_id($_GET[’sid’]);
}

air3中的画图的基本用法

// January 4th, 2008 // No Comments » // AS3知识积累

<?xml version=”1.0″?>
<!– usingas/AddingChildrenAsUIComponents.mxml –>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”>
<mx:Script><![CDATA[
import flash.display.Sprite;
import mx.core.UIComponent;

private var xLoc:int = 20;
private var yLoc:int = 20;
private var circleColor:Number = 0xFFCC00;

private function addChildToPanel():void {

var circle:Sprite = new Sprite();
circle.graphics.beginFill(circleColor);
circle.graphics.drawCircle(xLoc, yLoc, 15);

var c:UIComponent = new UIComponent();
c.addChild(circle);
panel1.addChild(c);

xLoc = xLoc + 5;
yLoc = yLoc + 1;
circleColor = circleColor + 20;
}
]]></mx:Script>

<mx:Panel id=”panel1″ height=”250″ width=”300″ verticalScrollPolicy=”off”/>

<mx:Button id=”myButton” label=”Click Me” click=”addChildToPanel();”/>

</mx:Application>

连连看 算法大揭密

// November 19th, 2007 // No Comments » // AS3知识积累

这 个简单游戏的技术问题是一类游戏如俄罗斯方块,纸牌游戏等制作的基础.通过对这个游戏算法的分析,特别是对检查连线的探讨,大家可以基本掌握这类游戏算法 的基本思维方法.   连连看游戏规则很简单,就是点中两个互相匹配并且可以通过不多于两个折点的折线连在一起的方块后,这两个方块就可以消掉.所以,下图的三种情况可以把 方块消掉.笔者的游戏中,配对规则是两数相加等于100. (more…)