用AS3来解析HTTP头部

AS3的URLLoader本身没有提供解析HTTP头部的功能,而在应用中,我们偶尔也会需要去解析HTTP头部,可以通过HTTP头部获取一些状态信息或者一些其他数据。

幸好AS3提供了Socket类,我们可以利用Socket来模拟HTTP请求,解析HTTP头部以及返回的内容。基本原理很简单:连接服务器的80端口或者其他web端口,向服务器发送请求头,基本上和下面类似:

GET /web/crystal/v1.1Beta01Build011/crystal_ext-min.js HTTP/1.1
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Accept-Encoding: deflate
Host: adsfile.qq.com

最新版flashplayer 10.1可能存在的一个安全问题bug

最近flashplayer 10.1升级到了10.1.82.76,由于该版本在安全性控制方面做了许多改进,导致出现了如下的问题。

在Firefox或者Chrome浏览器下,当跨域向远程服务器请求数据时,如果URL使用的是GBK编码的,那么即使在远程服务器上有安全策略控制文件,仍然会引发安全错误。而同样的服务器,使用UTF8或者纯ASCII码做URL则不存在此问题。

也有人发现了相同的问题:http://forums.adobe.com/thread/699750?tstart=0

此问题已提交至Adobe Flash Player Bug跟踪系统中,等待响应。

因此,建议大家尽量不要使用中文名作为URL路径,能使用英文字符的尽量使用英文字符,虽然有时候是难看一点。…

Flash自己调整自身大小

需求总是不断变化的,相信有非常多的人也碰到过类似的问题:比如鼠标移到flash上就把flash放大,鼠标移开就缩小,嗯,说了半天其实这个东西就是用来做广告的。

一般的怎么做的呢?无非是在flash里面用ExternalInterface来调JavaScript,用JavaScript来调整swf的大小或者切换另一个swf,或者索性就在swf的上面覆盖一个透明层(貌似要用空白的图片才好使,否则事件还是会跑到swf里面去,而不是给这个层d),然后用这个层来捕捉事件,然后调整swf的大小。

相信很多“挑剔”的人都和我一样,嫌这个方法太麻烦,又不好看。为什么不能直接写在swf里面呢?我也不知道为什么,Adobe没有提供这个接口……不过ActionScript不是可以调JavaScript吗?而且JavaScript也可以写在ActionScript里面,干嘛不从这里打点主意呢?

很好,actionscript.org

Fookie——在JavaScript使用Flash存储本地数据

前几个月的时候就说过在JavaScript应用中使用Flash来存储本地数据,使用这个方式有一个非常大的好处就是:不同的浏览器可以共享相同的本地数据。

现在终于抽空整理了一下以前的应用,作为一个简单的开源项目发布了。在Google Code上的地址是:http://code.google.com/p/fookie/,代码里面有可以在vs中智能提示的文档。

JavaScript类名为Fookie,提供了以下几个Public方法:

  • Fookie.init(swfUrl, options);
  • Fookie.read(key);
  • Fookie.write(key, value);
  • Fookie.remove(key);
  • Fookie.clear();

AS3位图任意形变一步一步来(4)——任意形变

转载请注明出处:http://fdream.net,作者:Fdream

放着放着就忘了,多亏army同学在后面催我,要不然还真不知道什么时候会继续弄这个。今天上午又抽空捣鼓了一下,偏移总算是弄出来了,不过渲染效率很低,中间的计算过程应该还可以继续优化的。另外,弄到这里发现还是有问题,分得较细的时候会出现裂缝……误差真可怕!

先不管这个误差,我们来看看能不能形变先。由于计算形变矩阵需要初始的坐标和新的坐标,需要两个方法来计算(貌似可以合并?):

// calculate points
// 包含x坐标和y坐标,分别存储在pxs和pys数组中
// @params:
//   w: 位图宽
//   h: 位图高
//   hs: 水平分段数
//   vs: 垂直分段数
// @return:
//   void
function CalculatePoints(w:Number, h:Number, hs:Number, vs:Number):void {
    var iw:Number

解决头疼的Firefox对SWF的缓存问题

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

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

AS3位图任意形变一步一步来(3)——切割位图

对不起,让大家久等了,继续写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

AS3位图任意形变一步一步来(2)——计算变换矩阵

转载请注明出处:http://fdream.net,作者:Fdream

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

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

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

根据…

AS3位图任意形变一步一步来(1)——了解矩阵变换

转载请注明出处:http://fdream.net,作者:Fdream

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

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

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

由于平移变换不是线性的,因此不能表示为2×2的矩阵,通过与一个1×2的矩阵相加即可得到相应的平移变换位置。上图中的取镜像变换从某种意义上也可以看做是一种平移变换:

通过上面的一些基本变换方式,我们可以得到一些比较复杂的变换:…

Silverlight VS Flash,谁更强?

Silverlight和Flash,到底谁更强?谁更有优势?很多初接触Silverlight和Flash的人总是会问这个问题,因为它们在表面看来确实很像,在更深层的应用来看,依然可以异曲同工。当然了,现在在3D特效、P2P流媒体方面,最新的Flash Player 10仍然以很大的优势处于领先地位。

如果你很犹豫,你不知道选择什么好,或者你对其中的Flash或者Silverlight有所顾忌,你可以看一看这个强人的blog:分别用flash和Silverlight写了很多一样的效果,你可以进行对比。这个上面写的很多效果都很酷,另外附有源文件下载,也是很不错的学习材料,值得一看。

当然了,上面的投票并不一定可靠,请依靠自己的大脑,相信你自己的眼睛!我之所以这么说,因为这个blog的文章会同时发表在Silverlight的官方网站上,所以请相信你自己的判断!

不管怎样,不可否认的是,Silverlight是Microsoft的一个重要战略产品,在目前看来,它的发展速度很迅猛,在许多基本的、常见的应用中已经不逊色于Adobe的Flash,未来会是怎样的一个形式还很难说。…