Browse > Home > Archive: 06月 2007

| Subcribe via RSS

AS2.0:利用Object.watch来控制函数执行队列

06月 22nd, 2007 | No Comments , 224 views | Posted by flashlizi in Flash8/AS2

很多时候,我们需要按照一定顺序执行一系列动作,必需保证一个动作完全执行完毕后再执行另外一个动作。解决办法很多,比如执行完一个动作就广播一个事件,再执行下一个动作。
现在我们利用Object.watch方法来实现这个目的(不熟悉相关方法的请看帮助),代码示例:
[code]var func = [func1, func2, func3];
var listener = {success:false};
listener.watch("success", callFunc);
var i = 0;
exec(0);
function exec(i) {
if (i < func.length) {
func[i]();
} else {
lietener.unwatch("success");
}
}
function callFunc(prop, oldVal, newVal) {
trace(prop + "{oldVal:" + oldVal + " newVal:" + newVal + "}");
if (newVal == true) {
i++;
exec(i);
}
return oldVal;
}
function func1() {
var id1 = setInterval(aa, 1000);
function aa() {
txt.text = "1:exec func1";
clearInterval(id1);
listener.success = true;
}
}
function func2() {
var id2 = setInterval(bb, 1000);
function bb() {
txt.text = "2:exec func2";
clearInterval(id2);
listener.success = true;
}
}
function func3() {
var id3 = setInterval(cc, 1000);
function cc() {
txt.text = "3:exec func3";
clearInterval(id3);
listener.success = true;
}
}[/code]
在此例中,实现了队列执行三个函数func1,func2,func3,每个函数的动作都是间隔1s后改变txt中的文本内容。恰好,我们利用了Object.watch方法来监控success属性,每当一个func[i]执行完毕后,就会改变success为true,继而执行下一个函数。此方法比和事件侦听是同一原理,但更为简洁实用。

AS3类:CRC32校验类

06月 5th, 2007 | No Comments , 131 views | Posted by flashlizi in Flash CS3/AS3

此类是根据java.util.zip中CRC32类写的AS3版CRC32校验类。
[code][color=#008080]/**
* @name:CRC32(CRC32校验类)
* @usage:根据java.util.zip中CRC32类写的AS3版CRC32校验类
* @author:flashlizi(www.flashrek.com/flashlizi@gmail.com)
* @update:2007/06/05
* @example:
var crc=new CRC32();
var ba:ByteArray=new ByteArray();
var str="123";
ba.writeUTFBytes(str);
crc.update(ba,0,3);
trace(crc.getValue().toString(16).toUpperCase());
*/[/color]
package com.flashrek.utils{
import flash.utils.ByteArray;
public class CRC32 {
private var crc32:uint;
private static var CRCTable:Array=initCRCTable();
[color=#008080]/**
* @usage 更新指定的字节数组的CRC32
* @param buffer:指定的字节数组,…arg:arg[0]为offset偏移量,arg[1]为length
指定长度
* 这里可以只指定一个参数buffer,也可以offset,length都指定
* @return void
*/[/color]
public function update(buffer:ByteArray,...arg):void {
var offset:int=arg[0]?arg[0]:0;
var length:int=arg[1]?arg[1]:buffer.length;
var crc:uint = ~crc32;
for (var i:int=offset; i < length; i++) {
crc = CRCTable[(crc ^ buffer[i]) & 0xFF] ^ (crc >>> 8);
}
crc32 = ~crc;
}
[color=#008080]/**
* @usage
* @param
* @return CRC32值
*/[/color]
public function getValue():uint {
return crc32 & 0xFFFFFFFF;
}
[color=#008080]/**
* @usage 将CRC32重置为初始值
* @param
* @return void
*/[/color]
public function reset():void {
crc32 = 0;
}
[color=#008080]/**
* @usage 初始化 CRC table, 长度为256.
* @param crcTable:CRC table
* @return 初始化的crcTable,使用标准poly值:0xEDB88320
*/[/color]
private static function initCRCTable():Array {
var crcTable:Array=new Array(256);
for (var i:int=0; i < 256; i++) {
var crc:uint=i;
for (var j:int=0; j < 8; j++) {
crc=(crc & 1)?(crc >>> 1) ^ 0xEDB88320:(crc >>> 1);
}
crcTable[i]=crc;
}
return crcTable;
}
}
}[/code]

AS3类:直接读取Rar文件中的swf文件

06月 1st, 2007 | No Comments , 126 views | Posted by flashlizi in Flash CS3/AS3

名称:RarExtractor(Rar文件解压器)
作者:flaslizi(www.flashrek.com)
作用:最初的目的是想实现flash文件直接读取rar里的资源,这样在外部文件较多的情况下,可以打包到rar文件里再load进来。
不过由于水平有限,并没有研究出rar的解压算法。而swf文件默认采用zlib压缩方式后,winrar在普通压缩模式下不会再压缩swf文件,因此不用解压就可以读取。
于是便有了这个缩水的RarExtractor,不过还是有点用处的。:)另外,此程序借鉴了Fzip的一些编程思想和方法,在此感谢。
说明:
1、此程序目前只支持压缩过的swf文件的读取(支持目录),不支持rar的固实压缩(solid)方式。
2、有目录的情况下,请注意"\"的转义。比如:filepath\demo.swf ,在外部读取的时候要用 filepath\\demo.swf。
3、程序并不完善,有什么意见大家可以提出。
4、在研究出Rar的解压算法之后或者谁能提供给我,将进一步完善本程序。

效果演示:http://www.flashrek.com/works/RarExtractor_Demo.html

源文件+示例下载:http://www.flashrek.com/works/RarExtractor.rar

wow gold wow gold wow gold wow power leveling wow power leveling wow power leveling nike shoes nike shoes nike shoes nike shoes jordan shoes Jordan shoes jordan shoes Jordan shoes world of warcraft gold world of warcraft gold Replica handbags 1