WEB 前端设计者的日志

有关flash , javascript 的一些小心得
RSS icon Email icon Home icon
  • 总理:您辛苦了。”温家宝:各级领导干部要执行报告个人财产规定”

    Posted on 三月 5th, 2010 admin No comments

    今天在腾讯门户上看了篇文章,讲述两会的公布事项。
    http://news.qq.com/a/20100305/002239.htm

    其中讲到:

    各级领导干部特别是高级干部要坚决执行中央关于报告个人经济和财产,包括收入、住房、投资,以及配偶子女从业等重大事项的规定,并自觉接受纪检部门的监督。【温家宝政府工作报告全文

    从这次两会可以看出,国家是专门出台了政策对于反腐败工作。看到这文章时给我感觉是很惊讶,众所周知地方政府腐败而且没有人管理,看看地方政府的皇宫写字楼就知道。虽然以前朱总理也做过大量的工作进行反腐败,之后就没有连任了,可见反腐败的难度。

    看来此次总理是为人民请命了,说声:总理,您辛苦了。

  • 新做的游戏地图,能很好的处理内存涨,cpu高的问题

    Posted on 三月 4th, 2010 admin No comments

    以前的游戏项目《三国无敌》,地图这一模块处理得不是很好,会引起内存高,不够平滑等问题。现在在新的项目中使用了新的处理方法,并把已经加载过的图片保存在缓存中,下次加载时无需要重要加。更好的图片组移除功能,与移除后内存清除的问题。请看flash:(点击并拖动)

    鉴于公司项目的原因,不方便公布源代码,请见谅。不过原理还是一样的,有技术交流问题请联系本人邮箱:xukeny@gmail.com

  • swf 加密:采用byteArray 方式,增加字符串加密,可加密大文件swf

    Posted on 三月 2nd, 2010 admin No comments

    什么都不说:先把工具传上来先。

    解密的fla:http://91face.com/swf/loader.fla

    使用方法:1.把cba.swf用“abcdef”密文加密,生成abc.swf。2.打开loader.fla(与加密后的abc.swf目录一致),就可以解密,并看到正常的swf文件了。

    今天需要用到swf加密,其实我个人来说不是很喜欢加密,flash的精彩源于社区高手的贡献,很多珍贵的代码都可以免费使用,我现做的项目有很多是采用第三方的类库。今天既然项目需要加密的话就加吧,于是试用了好几种现在流行的加密方法:
    第一种是使用”swf encrypt”、或者doSWF软件加密,个人认为swf encrypt 的加密不太好,原因不是它算法不够强或者什么的,而是闪客精灵等破解软件会专门针对它的加密算法进行破解。这会导致您加密不久的swf又遭人破了,doSwf是国人写的,还真不错,我试了下加密得很好,连movieClip都看不到。还真想了解下doSwf的加密原理(^.^),现在doSwf是要收费的一年200元,其实钱不是问题(不是我吹牛,至少对于公司来说是这样),钱能解决的问题都不是问题。但是…..(来了:)! ,dowSwf加密大文件的swf有问题,我用我们公司的游戏项目,一个1M左右的swf,加密会出错。所以这种方法对于现有的项目不可行。
    第二种方法是采用byteArray二进制加密,此种方法不会使swf变大,只是在原有的字节流中做混淆,对闪客精灵等软件可以起到很好的防破解作用。网上又有源码可以很好地做研究。网址:http://bbs.blueidea.com/thread-2900310-1-97.html 。但是此方法有一个弊端,就是需要一个解密的swf(下面会说到),解密中的密文还是会暴露。

    衡量了两种方法后准备用第二种,因为简单又可以达到效果。使用后觉得写此加密方法的作者应该是在flash player9是写的,采用的还是用php来生成加密后的swf文件,这样使用起来非常的不便,因为还要布置php的运行环境。因为flash10的:FileReference类可以本地获取与保存二进制数据了。所以决定对其进行改进。

    说得此,我先分析下byteArray的加密原理:
    byteArray的加密原理是,先用:URLLoader把swf文件加载进来,得到URLLoader的data属性(byteArray类型),然后把这个byteArray数组进行分解,得到一个8位的字节流。然后对这个字节流进行位移(也就是加密的数字,文章中用的是+13),最后得到一个新的字节流数组,进行保存。

    解密的方法也是如此:先把文件导入进来,得到byteArray,分解成8位的字节流,(解密方法就是对字节流进行反位移,也就是加密是+13,解密就是-13),这样生成新的字节流数组就是可以使用的swf文件了。说到此我不得不佩服原文作者对byteArray机制的理解,不知是否是自己对加密了解甚少,我就是觉得能这样加密就是强(o_o)!(肯定有人笑我了,哈哈)。

    这样加密也暴露了只能采用数字加密的问题,后来我又发现一个比较大的问题,就是:加密最核心的原理是对字节流(8位)的加密,因为是8位的,范围只能是:0~255之间,那么你采用超过255的数字加密也是会取余成255的,不信你用256这个数字加密看看,得到的是什么?竟然是加密后的swf,和原来的swf是一致的,原因就是256会变成0,你位移+0,那当然是等于没有变啦。因为这种加密方式生成的加密文件只能有256种,那么我麻烦点在0~255间一个个地试就能得到解密的swf。

    为此我改进了加密算法,使用字符串作为密文。把字符串转为一个ASCII数组(如”abc”,对应的ASCII数组为97,98,99),然后与文件的字节流数组进行循环加密。如一个1K的swf,那么它有1024个字节流,第一个字节流与97进行位移,第二个与98位移,第三个与99,第四个又循环与97加。这样生成的加密文件就无穷多了。解密的方法也只有拿到密文才能进行解密。

    下面公布加解密方法:

    //加密函数
    private function compress(byte:ByteArray):ByteArray{
    var key:String = password.text;        //得到密文

    var flag:int = 0;
    var newByte:ByteArray = new ByteArray();
    /* */
    for(var i:int = 0; i<byte.length ; i++ ,flag++){
    if(flag >= key.length){
    flag = 0;
    }
    newByte.writeByte(byte[i] + key.charCodeAt(flag));
    //newByte.writeByte(byte[i] + 256);
    }
    //输出
    fileByteArray = newByte;
    saveBtn.visible = true;
    return newByte;
    }

    //解密函数
    private function uncompress(byte:ByteArray):ByteArray{
    var key:String = password.text;        //得到密文
    var flag:int = 0;

    var newByte:ByteArray = new ByteArray();
    /* */
    for(var i:int = 0; i<byte.length ; i++ ,flag++){
    if(flag >= key.length){
    flag = 0;
    }
    newByte.writeByte(byte[i] – key.charCodeAt(flag));
    //newByte.writeByte(byte[i] + 256);
    }
    //trace(newByte);
    fileByteArray = newByte;
    saveBtn.visible = true;
    return newByte;
    }

    源文件(flex):http://www.91face.com/swf/entryptSwf.mxml

    最后问题是解密的swf,还是会暴露代码。如a.swf把encrypt.swf加载进来后,虽然这个encrypt.swf看不到了,但a.swf还是未加密的,好在此时a.swf会比较小,可以用doSwf加密。doSwf未授权版本也可以绕过,删除其水印与删除其定时弹出的链接。为尊重作者劳动成果,故不公布代码。大家还是去doSwf的网站上购买吧,真希望有一天doSwf也能公布其加密方法,到那时swf加密又会上一个新的台阶了!

    最后说句,本人因为平时极少写博客,文字组织能力太差,错别字太多。(555)晚了,回家吧!!!

  • 我的BrowserManager为什么用不了?

    Posted on 十二月 26th, 2009 admin No comments

    如题:我的BrowserManager为什么用不了?

    今天就遇到了这样的一个问题,用BrowserManager时,在测试环境下,可以很正常的得到BrowserManager.url信息,但放发布放在另一个.php页面中就怎么也使用不了。

    后来看了生成的html页面有这样一句话:<script src=”history/history.js” language=”javascript”></script>,把它复制到要发布的.php页面中,就OK了。

    原来flash是通过js得到浏览器的URL地址的,没有这个JS文件就当然得不到啦。!!

  • 原来升级 WordPress 这么的方便

    Posted on 十一月 6th, 2009 admin No comments

    今天看到wordpress提示需要升级,于是选择了自动升级按钮,原来一切用PHP都可以做到自动升级。

    但我还是不明白为什么PHP能做到自动升级功能。看到根目录下的PHP文件又确实被修改了,日期为今天11-06。

    何解?

  • [转]看了一篇翻译得不错的文章,讲述在avm2 上运行c/c++程序的,现在文章献上

    Posted on 八月 13th, 2009 admin No comments

    看了一篇翻译得不错的文章,讲述在avm2 上运行c/c++程序的,现在文章献上,大致意思是在flash player上通过调用LLVM虚拟机,实现c/c++级别的效率.有了这样速度,做3D游戏不再是梦想.
    自从2007年中推出了AS3支 持了面向对象的开发方式之后, 可谓动作不断. 去年又将AVM2的核心虚拟机tamarin 捐赠给了ECMA4 , 又将FlexBuild2直接升级到FlexBuild3, 这不,在08年末,又蹦出一个 Adobe Alchemy, 这在战略上具有极为重要意义. 而FLASH 从一个简单的动画客 户端,一跃升级成一个未来富媒体应用程序的平台. 从这一系列战略步骤,不难看出ADOBE想成为WEB乃至桌面开发霸主的野心! 微软你要小心了. 那么你可能要问了, 为什么Alchemy这么重要呢? 作为FLASH实践者, 效率问题是众所周知的. 因为, FLASH中运行的代码是 ACTIONSCRIPT, 它是一个脚本语言.而这个语言是运行在FLASH内部的AVM2虚拟机上的. 所以它的一些功能都需要经过, 语言解释成AVM2虚拟机字节码,然后AVM2运行字节码,最后由本地NATIVE语言,也就是本机2进制程序执行.虽然这解决了平台无关的问题,但是带 来一个副作用,就是比较慢,这就是为什么FLASH上一直没有杀手级应用的主要原因. 从本质上来说, 这是一个构架上的问题. 而Alchemy 的出现,从构架上,改进了这个问题,你可以使用C/C++编写核心,快速的算法,让AS3进行调用, 达到加速的目标. 这在过去,你只能使用ADOVE提供给你的内置native 程序. 现在,你可以自己干这件事情了. 既解决了平台无关的问题,又解决了效率的问题,甚至可以利用FLASH本身几十亿现有的客户端的优势,解决了渠道问题.可以这样说, Alchemy 打开了一个前所未有的时代! 让我们看看 Alchemy 到底做什么. 从ADOBE的说明文档上可以看到, Alchemy 是一个 运行在低层的虚拟机 (Low Level Virtual Machine) ,他运行在AVM2之下. 那你又要问了.既然有了一个虚拟AVM2了,为什么还要一个LLVM? 其实, LLVM 将C/C++代码进行编译,并且生成RISC-LIKE指令的字节码, 存储在缓冲区之中, 在FLASH运行开始的时候, 实时翻译成机器相关的本地代码. 需要调用的时候是调用翻译之后的2进制本地代码.以此来提高整体速度.这就是LLVM的关键技术, 而运行时译 (Runtime-Compile) 这种技术有点像 .NET . 而这种LLVM和AVM2的区别是, AVM2实时解释运行脚本代码,LLVM 预编译本地运行.可以这样认为 AVM2 是 JAVA虚拟机, LLVM是 .NET虚拟机.他们在构架上处于不同的层次,满足不同需求对速度的要求. 当生成编译完成后,字节码需要保存在一个缓冲区之内. 由于在框架之内需要和AVM2兼容,所以这个缓冲区,将以 AVM2能识别的BYTEARRAY 形式保存在内存之中. 并且, alchemy自动生成一个 AS3的接口文件,以方便AS3程序进行调用. 值得注意的是, 所有C/C++编译之后的数据,都以 SWC 函数库 的形式生成, 用户可以在自己的工程里 IMPORT.经过使用后发现,由 Alchemy 生成的SWC文件是比较大, 比 C/C++源文件大的多.即使一个只有几十来行的纯C 功能,生成SWC后都会有100多KB. 参考ADOBE的文档上说, 编译C/C++的代码,会将C/C++所需要的所有库,比如C标准库统统放到一个SWC里去,并且严格遵循POSIX标准. (可移植操作系统接口) 由于这种机制的存在, 我们甚至可以在C/C++里嵌入线程的支持, 来运行同步或者异步的功能. 从而弥补了FLASH是单线程这一不足! 这将是一件美妙的事情! 而本人认为,由于C/C++代码是公用一个C标准库的,所以只要SWC中的功能越多,那么从空间效率上就越是划算. 并且在目前的宽带之下,多个100来KB问题不是太大. 当然,安全问题,也是alchemy的重头戏, 我们知道, FLASH 对安全问题是有一套非常严格的措施的,比如访问本地资源后,就不能访问远程资源,访问这个域的资源后,就不能访问其他域的资源.如果你要访问,就要在另外 一个域上安装一个沙箱(SecurityBox)文件,才能顺利访问. 而alchemy将C/C++带入FLASH之中,而C/C++ 是否能坏了这个规矩,让应用程序出轨呢? 答案当然是否定的,一旦这个程序被调用之后,其C/C++程序被严格的运行在一LLVM上,LLVM作为一个代理机构,向上,提供了对C/C++的平台支 持,比如独立的内存空间,独立的堆栈空间,独立的线程管理机构,等等. 向下将2进制程序输送到 本机CPU进行执行. 所以安全问题上是非常到位的, 所以对C/C++来说,只要LLVM环境没有提供的,它将永远访问不到. Adobe已经对 alchemy 进行了比较深度的优化,并且我相信以后将继续下去.就从用户来说,由于有了alchemy 的出现,一些对速度要求较高的算法,都可以使用C/C++来代替. 由于接口上都是AS3的接口,所以移植现有的程序将会非常轻松.比如目前游戏开发中广泛使用的那个BitmapData.CopyPixel 如果用C纯代码进行改写,那么速度将提高几十倍之多. 总结. Alchemy 的出现,开启了一个全新的时代, 未来你将会发现网业上不再是简单画面,而是充满动态的不同的效果,给于用户全新的体验.随着LLVM提供的功能加多,比如将显卡硬件的功能作为一个抽象接口提供给C/C++调用,那么将来UNREAL3出现在网页上,你千万不要惊奇.甚至WOW出现在网页上,你也不要惊奇. 因为新时代的门已经打开!

  • flash生成swc和flex相互问题.

    Posted on 八月 2nd, 2009 admin No comments

    今天一朋友问我flash生成的UI怎么放到flex里,我告诉他生成SWC.一个小时后他说生成了SWC,但是在flex看不到.通过远程操作终于把他遇到的问题解决了.现在说下遇到的几点误区.
    在生成SWC前,先看下一个类(UIComponent),flash和flex都能使用这个UIComponent,但flex里是不能用MovieClip类的,这是最容易产生误区的地方.
    UIComponent类的继承关系:
    flex中的架构,(举例UIComponent类的继承关系)
    UIComponent > FlexSprite> Sprite >DisplayObjectContainer>InteractiveObject >Displayobject
    flash中的架构(Sprite类的继承关系)
    Sprite >DisplayObjectContainer>InteractiveObject >Displayobject

    所以可以看得出,movieclip并不在继承关系里.那么生成SWC时基类就不能写:flash.display.MovieClip,而是mx.flash.UIMovieClip.

    1.我们先打开flash CS3,版本需要profressional.才能生成SWC,还有下载一个小插件flexcomponentkit,这里不多说明.

    2.生成一个mc,然后在库面板里右键->属性.如图:
    ff1
    这里要注意,选择”为ActionScript导出”,时默认的基类是flash.display.MovClip,这里需要改为mx.flash.UIMovieClip,否则在flex中使用是看不见此MC的
    3.选择此MC,然后选择命令->convert symbol to flex component,再在库面板中选择MC,点击右键,如果是profressional,会出现一个导出SWC文件,点击后保存一个名字,如MC.swc
    ff31
    4.打开flex,选择一个建立好的flex项目.打开项目属性面板->flex build path->Library path,然后点击 Add SWC,选择刚才生成的MC.swc,点击确定
    ff2
    5.如果一切正常,在application中输入<local:就是出现刚才Circle5的类.完整代码local<local:Circle buttonMode=”true”/>运行,OK
    ff3

     

     

     

     

  • 新游戏”三国无敌”的界面确定了

    Posted on 七月 21st, 2009 admin No comments

    新游戏”三国无敌”的界面确定了,建筑采用了和三国志10类似的风格。

    为了保护建筑风格,界面也用了很多透明效果,相信游戏出来一定会受大众喜欢。

    游戏主界面

    游戏主界面

  • 3D角色选择

    Posted on 四月 20th, 2009 admin No comments

    3D角色选择

     

    源文件

  • 新做的initial2 的后台管理页面

    Posted on 四月 18th, 2009 admin 2 comments

    新做的initial2 的后台管理页面,

    准备用flex+php做此系统,先做一个界面风格给客户,

    因为想到客户是一家产品设计公司,于是加重了底色。

    等待客户的回复,希望能一次通过,^.^!
    initial2