存档

作者存档

how to launch a exe by swf

2009年5月8日 admin 3 条评论

这个问题几乎是每个flasher在学习阶段都会遇到,并试图实现的。但是不太靠谱。今天一个学弟又问了这个问题,原因是他的毕设中有这么个需求。我给总结了几种方法,希望对看博客的你有所帮助。

1.传统的fscommand,fscommand(”exec”,..),这种方法要把exe放到同目录的fscommand下面,可以传参,可以 启动bat,但是无法交互,可靠性不高。

2.中转法,有个localserver的角色,启动swf,swf可以和localserver通信,localserver来启动exe,做消息中转。如果真的非得把若干个不相干的东西拼成一个,这种方法可以考虑。扯远点,swf的表现层开发远高于MFC等,所以很多软件公司的精美界面其实就是flash的,比如好几款网游的登录界面,用C++或者别的啥做个壳/容器,也可以看做为中转法。

我和学弟扯到这里,他忽然告诉我,他的swf是在页面中的,是html中的,怎么启动客户机exe。我一头汗,浏览器启动exe…但是,也不是不可能。考虑到是毕设,就让他用delphi,c#或者别的啥拖个webbrowser控件,做个定制的浏览器,还是中转的思路,蒙混过关。但是良心告诉我,不能这么忽悠他。于是有了第三种方法

3.伪协议,说着挺忽悠,其实很简单,自定个协议比如aseye,在注册表中关联到需启动的exe,然后用flsh中getURL(as2)/navigateToURL(as3)它即可比如navigateToURL(new URLRequest(”aseye://***”));原理可以参考迅雷,flashget或者emule,呵呵,具体注册表怎么写? 如果你装了emule。在regedit中ctrl+f  ed2k,看看怎么写的,导出来改改即可了

话说回来我的几种方法都有点不正统的味道,Adobe应该有包容天下的心态才是王者风范,这点该学学python,直接拿c++的东西,不过好在有了alchemy,可以期待,否则连AIR都启动不了别的exe,太玩具了

Popularity: 45% [?]

分类: flash&flex 标签:

facebook flash api lib 发布

2009年4月2日 admin 没有评论

flash在sns游戏中的应用越来越重要,facebook排名前20的,有12个是flash开发的,所以推出as3的lib也是明智的选择,这个地址可以看到详细说明和一些应用例子。

webgame中flash无疑是首选,优势很明显,庞大的开发者群,完善的IDE,90%+的FP覆盖率和各种第三方库,服务器端解决方案…但是webgame还有比较多的瓶颈亟待解决:

1:画面渲染

flash在矢量图处理上的能力无可厚非,但是在大家越来越被3d,次时代的效果惯的日益挑剔的时候,flash在3d处理上还是处于比较低级阶段,经常一个用c/c++很容易实现的效果被flash做了,往往博得众多开发者交口称赞,而用户看来,很卡,交互流畅太低,flash支持硬件加速,提供opengl代理才是3d起航的时候,也许是fp12,fp13吧.

2:高并发

实时webgame,对负载要求很大,著名的CLUB PENGUIN是用的smartfox server,基于xmlsocket的软实时,所以多是回合游戏。fms做边缘服务器是很多棋牌类webgame的选择,但服务器3000-5000的样子,fms的优势在于rtmp,如果没有语音也是浪费,所以自己开发服务器的也不少,况且amf有c,python,php等多种语言的实现方案,难度降了不少,我猜rtmp的文档出来之后应该是百花齐放的时候。red5要改,prtmp要改,相信也会有性能不俗的高效rtmp server,(学好erlang很重要)…

3:防作弊

webgame有先天的不足,他是基于浏览器的,所以和桌面exe不是一个级别。换而言之,他没办法对exe做任何限制。webgame几乎都有作弊的可能,比如之前很火的**三国,相信对外挂是恨之入骨了:)

Popularity: 42% [?]

分类: 前端-frontEnd 标签:

停止所有时间轴动画

2009年3月26日 admin 没有评论

游戏或者动画中使用到时间轴动画,在暂停时mc未必跟着主时间轴停下来,写个简单递归吧。
function stopAllAnimations( mc:MovieClip = null ):void
{
if( !mc ) mc = this as MovieClip;

for(var i:int = 0; i < mc.numChildren ; i++)
{
if( (mc.getChildAt( i ) is MovieClip) == false ) continue;

MovieClip( mc.getChildAt( i ) ).stop();
if( mc.numChildren > 0 )
stopAllAnimations( MovieClip( mc.getChildAt( i ) ) );
}
}

Popularity: 39% [?]

分类: flash&flex 标签:

as3移除匿名监听函数

2009年3月16日 admin 2 条评论

有时候写代码的时候图方便,比如在监听句柄中使用添加监听时的参数,在监听中直接用匿名函数,可以使用arguments.callee获得该匿名监听函数的引用,来移除,举个简单的例子
m_someBtn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent):void{
(e.target).removeEventListener(MouseEvent.CLICK,arguments.callee);

})
arguments.callee 是as2时代就有的东西了,可以方便的引用当前执行的函数,引个例子吧
private var count:int = 1;

public function ArgumentsExample() {
firstFunction(true);
}

public function firstFunction(callSecond:Boolean) {
trace(count + “: firstFunction”);
if(callSecond) {
secondFunction(arguments.callee);
}
else {
trace(”CALLS STOPPED”);
}
}

public function secondFunction(caller:Function) {
trace(count + “: secondFunction\n”);
count++;
caller(false);
}

Popularity: 68% [?]

分类: flash&flex 标签: , ,

一点体会:反射是个好东西

2009年3月13日 admin 没有评论

最近一个项目中需要有个批量抓取网站特定内容的工作,流程大概是登陆->获取该用户文章列表->抓取文章。做起来很容易,就是post或者get数据,然后正则匹配,但是问题是需要做好几个网站的,这个功能是项目中的一个部分,就需要有可扩展,低耦。所以一开始的时候是想在主题程序实现通用程序,再用配置文件,把正则规则载入,一开始还行,但是后来发现了几个问题,1.所谓的通用的东西=兼容多种规则=体积庞大,这个很好理解,比如要兼容几个浏览器的js必然有多处hack。2.效率低下,本来抓取就是需要做很多字符串的处理,加上规则后必然导致多处判断,甚至处处判断。3.开发难度大,针对每个网站的规则很好写,但是通用的东西必定会一改再改,比如获取列表是get,偏偏有一家用post,还加了验证用的随机参数,那就必须在之前的一页把提出来,而这个并不具有普遍性,必须为它“个性化定制”。4.整个结构很ugly。
经过思考后,我改进了模型,还是提取出来操作的常规几步作为接口,每个网站用个类来实现它,提供统一的对外接口。生成文件A,而主文件中只需要加载它并反射出来,使用相同的方法来调用获取不同的网站数据,被抓取网站有更新或者需要添加新的网站时,只需要更新A即可,对主体是黑盒。整个结构看起来爽快明了,而且每个网站的抓取实现各不相同也罢,没有干扰的。
做好之后,再想想其实很简单,也许对于经验老到的玩家而言,这个应该是”下意识”的首选方案。:)

Popularity: 16% [?]

分类: flash&flex 标签:

sothink反编译后常见错误

2009年2月24日 admin 没有评论

从事flash的几乎没有没经历过反编译阶段,我的看法是:用来参考别人思路,学习提高可以,如果直接改来当做自己的作品就有点可耻了。做反编译的有好几家,常用的是asv,sothink,Trillix。言归正传,事情是这样的,之前as3模仿过一个图片切换的东东,(因为原来as2版本的似乎有点跨域问题),后来我格了系统,丢了源文件,再后来老沙向我要那个东西,并且要做点修改,这时候只能反编译了。

总结了点反编译后文件出错规律,拿来说说吧

1.添加了奇怪的数字字符

总觉得这玩意和编码有关,因为有的时候会在函数定义的下面一行多出一串数字,比较简单的,删除即可。

2.导入错误的包,或者路径错误.

比如明明是main.as 还要import main.*; @-@

3.while优化

while循环比for循环优化,所以很多代码中的for循环会被优化为while,这时候变量没有赋初始值,自增上限等往往会有边界错误,这个错误往往会引发undefined,等运行时错误。

4.块变量

到目前为止,flash没有块变量,也就是一个函数体中的变量唯一,但是反编译的东东有的时候会一个变量有多个含义,这时最好把_loc_1,_loc_2等改成有意义的单词。

5.类型错误

这种错误的产生很是匪夷所思,比如会把一个变量定义为string,然后给string添加个动态属性。这时候往往让人感觉无处下手,其实是类型错误导致的。

ok,暂且记录下心得,也算是新博客第一篇,提供下修改过反编译的代码

flash_box

Popularity: 35% [?]

分类: flash&flex 标签: