Fdream's Blog
专注于WEB前端开发
Powered by Google
1 2 3 4 5 6 7 8 913

Firefox速度快,可惜就是爱缓存,即使你在HTTP请求头部里面设置了no-cache,或者你在本地调试,Firefox都会毫不在意地一如既往地缓存你的swf,即使你设置了你的缓存空间大小为0还是一样。(IE也差不多,不过貌似有时候Ctrl+F5还是有用的)。

在Firefox下是可以这样解决的:

  • 打开一个新的标签页(TAB)
  • 在地址栏输入about:config
  • 同意它的警告提示,就是答应它你会小心的(I'll be careful, I promise!)
  • 在过滤器(filter)里输入browser.cache.disk.enable,选中那一行结果,改变其值为false

这样子就不会缓存任何东西了,要想让缓存功能生效,记得改回来就是了~

load外部swf并共享变量
20 晴天 2008-11
Fdream 发表于 Flash, 已被阅读 1008 次评论 0 条
关键词:as3 as actionscript

如果你在做flash开发,这个应该是经常碰到的事情:用a.swf加载b.swf,然后需要在b.swf中调用a.swf的方法或者变量。在as2里面实现这个很简单,root就是万能的。在a.swf中,用loadMovie的方法load b.swf到一个MovieClip后,b.swf就可以通过_root或者_parent来访问a.swf中的变量了。不过这招在AS3中已经不灵了,得换个方式。

在as3中,有这样一种方式可以实现:在a.swf中,使用Loader类来load b.swf,在load完成之后,调用b.swf中的一个方法,把a.swf的引用传入或者把相应变量传入给b.swf。一个简单的例子如下:

在a.swf的文档类或者时间轴上这么写:

参考代码: [复制代码] [保存代码]

// 这个是我们要访问的变量
var ab:String = '1234';
// 加载b.swf
var ldr : Loader=new Loader();
ConfigureListeners(ldr.contentLoaderInfo);
ldr.load(new URLRequest("b.swf"));
// ...

对不起,让大家久等了,继续写blog。

今天我们继续研究位图的任意形变,今天的主要目的就是从外部加载一张图片,然后分割成两个三角形。当然了,分割成两个三角形是远远不够的,这一点,我们在后面会讲到。

从外部加载一张图片很简单,使用Loader类就可以轻松完成了。不过要注意的是这里是Loader类,在包flash.display下,而不是flash.net下的URLLoader类。这个类使用很简单,如下(为了简单,这就不写那些条条框框了,直接写在时间轴上了,所有的代码都在第一帧):

参考代码: [复制代码] [保存代码]

// 这个是我们要load的图片
var url:String = 'green.jpg';

//这个是用来保存位图数据的
var bmd:BitmapData = null;

// load方法
function Load():void {
    var req:URLRequest = new URLRequest(url);
    var loader:Loader = new Loader();
    // 添加事件侦听
    ConfigureListeners(loader.contentLoaderInfo);
    try {
        // 加载图片
        loader.load(req);
        // 如果你要在舞台上显示出来
        // 可以添加下面的代码...

由于仿射变换时,平行的边依然平行,所以,我们无法对一个矩形的位图进行随意变换,比如我们无法拉伸一个角,也无法进行把它变成梯形等。在上文中,我们提到过一种思路,就是把矩形分割成两个三角形,这样变换时从表面上看来就没有什么平行边了,这样我们就可以变换其中的一个或者多个角了。注意,我这里说的是从表面上看,这一点在后面的变换中要进行一定的处理的。

这样我们只需要对三个点进行平面变换,假设我们的三个点分别为(x1, y1)、(x2, y2)、(x3, y3),要变换的位置分别为(x1',y1')、(x2', y2')、(x3', y3')、现在,我们要做的就是计算其变换矩阵。假设其变换矩阵为:

注意,在Flash中,其对应的变换矩阵应该是这个(平移变换的位置略有不同)...

在Flash/ActionScript中,只提供了仿射变换功能。仿射变换包括平移(x 和 y 重新定位)、旋转、缩放和倾斜,在进行这些形变时,平行线仍然会保持平行,因此没办法做到任意形变。

实现位图或者MC(MovieClip)的任意形变的一种方式就是把它们分割成三角行,然后对三角形进行相应的仿射变换。比较流行的PV3D(papervision3d)就是采用的这种方式。

一切从简单开始,我们先看看一个点在平面上的几个简单的基本变换。一般来说,我们都将平面上的一个点表示为一个1×2的矩阵,我们可以通过将改点乘以一个2×2的矩阵来对该点进行变换。以下是一些简单的示例:

JSON格式的数据还是很方便的,在JavaScript中使用非常广泛。因此在Flash和JavaScript的交互中,使用JSON格式把数据传递给Flash也是一个很不错的选择。不过用AS3(ActionScript 3)来解析JSON是个麻烦的事情,还有有Adobe有相关的API——有一个com.adobe.serialization.json包,可以用来解析JSON格式的数据,并转换成和JS中类似的对象。

这个包使用起来非常简单,如下:

参考代码: [复制代码] [保存代码]

// 这是JSON格式的数据
var str:String = '{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }';
// 转换为对象
var obj:Object = JSON.decode(str)  as  Object;

不过,就像我说的,这个类很不完美,因为它对你的JSON数据格式要求太严格太BT了,以下几点都是不允许的...

我基本不用组件的,偶尔为了速度还是需要用一下组件,没想到AS3里的组件变化也非常的大,设置一个ComboBox的属性也够麻烦的。先看看效果:

在AS3中,要设置ComboBox的字体类型和字体大小也要用TextFormat,而且很麻烦的是要分别对TextField和dropdown设置该TextFormat,最诡异的是设置dropdown的宽和高,ComboBox有个dropdownWidth属性,却没有对应的dropdownHeight属性,而是要使用dropdown的rowHeight属性...

之所以要写这篇文章,是因为最近我的blog中有很大一部分流量来自于Google和百度的搜索,其中一些比重很大的关键词就是:Flash Player存在严重漏洞。可惜搜索引擎收录的是我很早以前的一片文章,关于FlashPlayer 7的,而不是FlashPlayer 9.0.115的。

我但是曾经在经典论坛怀疑说FlashPlayer 9.0.115是不是发得有点匆忙,有个在Vista下全屏的bug都没完整测试就直接发出来了,后来到了9.0.124的时候解决了这个bug。前不久又爆出9.0.115这个版本有严重安全漏洞,关于漏洞,网络上(杀毒软件厂商)的描述是这样的:

引用内容:

Adobe Flash Player存在安全漏洞,黑客可利用恶意 Flash 动画(SWF 文件)攻击存在漏洞的系统;用户在播放含有恶意的Flash动画(SWF 文件)时,电脑可能被植入木马等恶意程序。

攻击者可以通过精心设计的特殊SWF文件实施攻击。浏览这些特殊构造的SWF文件,会运行攻击者设定的任意代码。由于Adobe Flash Player用户广泛,而且该漏洞涉及IE浏览器、Firefox火狐等多款浏览器,因此危险指数非常高。

网上的很多建议是在FlashPlayer 10发布之前提出来的,建议大家升级到9.0.124这个版本。但是赛门铁克公司说9.0.124这个版本也有问题,所以建议大家直接升级到最新版本FlashPlayer 10...

1 2 3 4 5 6 7 8 913
Copyright © 2005-2008,Fdream All Rights Reserved
Processed in 0.5312568 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号