由ActionScript撰写的日志
AMF抓包利器-Charles
八 1st
平常开发中,如果我们要对http(s)的内容进行抓取的时候,我们通常会使用HttpWatch或者Fiddler这几款非常著名的的抓包工具。但这两款工具对于AMF协议是无能为力的。
目前来说,能用的、比较靠谱的AMF工具一款是ServiceCapture 这个在去年4月份的时候介绍过。还有一款就是本文要介绍的Charles。
Charles主页:http://www.charlesproxy.com/
目前,Charles的最新版本为3.3.1。提供了多个版本:Windows 32Bit,Windows 64 Bit,Linux,Mac。同时还提供了FireFox的插件。
ActionScript中使用as运算符类型转换时应当避免以下问题
七 13th
先做个题目吧:
var testNum:Number=662.382;
var testObj:Object=Object(testNum);
trace(testNum,testNum as int,int(testNum),testObj,testObj as int,int(testObj),testObj as Number);
这个的结果刚开始我以为会是
662.382 662 662 662.382 662 662 662.382
不过结果却是
662.382 null 662 662.382 null 662 662.382
在刚刚coding的时候使用PureMVC发送notification之前没有将value转为int就直接发送了,然后接收后将object使用as运算符转换为int发现结果为0。当时相当郁闷了。因此不使用强类型检查时应当特别注意数据类型,另外,使用as运算符也应当注意,避免以上情况,尽量使用显式类型转换。
其实这个问题非常非常基础,对于这种细节性的问题以后还得多注意注意。
Update:http://www.anujgakhar.com/2009/08/26/flex-casting-with-as-vs-casting-with-braces/ 这位老兄也同样遇到了这个问题,不过他比我解释地更为清楚,因此引用一下:)
TweenLite的新用法
五 31st
原文:Another Reason to Love TweenLite
从Google Reader中看到这边文章的确被雷到了,的确是好方法。
而通常来说,如果我们要在某一特定时间后执行某一方法需要一个Timer。但是原文的博主采用了一个比较奇妙的方法,使用了TweenLite巧妙地实现了此功能。
TweenLite.delayedCall(0.5, myFunction, [param1,param2]);
ActionScript也要代码分离
三 27th
代码分离是一个很好的编程习惯,可以让显示和逻辑分开,使得程序的结构更为明了。其中微软的Code Behind技术也是其中的一个代表,广泛地用于.Net Framework的程序设计中,包括asp.net,winform,silverlight等等。
而基于Visual Stuido的Flex开发插件Amethyst也实现了类似于.Net Framework的Code Behind技术:http://www.sapphiresteel.com/ActionScript-Code-Behind-in
前几个月,我翻译了一下Amethyst发布首个测试版的消息,Adobe Flex Development in Visual Studio。现在Amethyst已经更新到了Beta4版本。
相信其中的Code Behind特性会让很多.Net开发者喜欢上Flex开发。
AS3 Scale9 Bitmap
二 19th
翻译自:http://www.uza.lt/codex/as3-scale9-bitmap/
简介:
AS3 Scale9 Bitmap是个辅助的类,使用它可以通过bitmap数据填充创建九宫格sprite,而这些在Flash 9中是无法实现的。这个辅助类根据用户定义的缩放矩阵创建了9个虚拟的九宫格sprite。特别适用于创建用户界面(比如按钮,可伸缩的UI元素等等)。
内容:
- Scale9SimpleStateButton – 用于创建可伸缩的1、3 或者3种状态使用bitmap数据(皮肤)的按钮的类。
- Scale9SimpleBitmapSprite – 用于创建静态的可伸缩的UI元素的使用bitmap数据(皮肤)的sprite的类。
- 示例代码(Flex Builder 3 项目)
要求:
ActionScript3
演示:
Scale9SimpleStateButton(左上角),Scale9SimpleBitmapSprite(右下角)以及初始的皮肤文件(底部)
示例语法:
Actionscript:
var scale9_example:Rectangle = new Rectangle(6,6,105,20);
/* Initialize the button with all 3 states (normal, hover, down) using 3 different bitmaps */
var button_example:Scale9SimpleStateButton = new Scale9SimpleStateButton(
scale9_example,
button_skin_normal.bitmapData,
button_skin_hover.bitmapData,
button_skin_down.bitmapData
);
/*
* Scale the button using "width" and "scaleY" properties
* (in general you can use "width", "height", "scaleY", "scaleX" properties for scaling)
*/
button_example.width = 300;
button_example.scaleY = 2;
下载:
比Flex更为轻盈高效的绑定
二 18th
这是Flight Framework的一部分,完全采用弱引用,非常轻盈且高效。
更为详细的介绍:
http://www.xtyler.com/code/177
以及
http://www.flightxd.com/flightframework/
Google Code:
ActionScript中文本字段的透明度缓动
二 4th
因为TextField不支持对alpha的变换。因此需要对其进行一些操作。
有两种方法。
第一是使用BitmapData去绘制,然后对Bitmap进行操作,这个方法代码量稍微偏多,这里不做赘述。
第二种是使用ColorMatrixFilter过滤器。
//Code:
package com.drore.map.view
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.filters.ColorMatrixFilter;
/**
* 动态生成鼠标提示
* @author Dada http://www.asflex.cn
* @version 5.0
* @copy Drore http://www.drore.com
*/
public class MouseTip extends Sprite
{
private var txtTips:TextField = new TextField();
public function MouseTip()
{
addEventListener(Event.ENTER_FRAME, init);
}
private function init(event:Event):void
{
removeEventListener(Event.ENTER_FRAME, init);
txtTips.selectable = false;
txtTips.tabEnabled = false;
txtTips.mouseEnabled = false;
txtTips.cacheAsBitmap = true;
txtTips.multiline = false;
//设置滤镜
txtTips.filters=[new ColorMatrixFilter];
addChild(txtTips);
}
//设置提示文字
public function setText(txt:String):void
{
txtTips.text = txt;
txtTips.width = txtTips.textWidth + 10;
drawBg();
}
//绘制背景
private function drawBg():void
{
graphics.clear();
graphics.beginFill(0xF3E789, .8);
graphics.lineStyle(1, 0xFFFF00);
graphics.drawRoundRect( -5, -5, txtTips.textWidth + 15, txtTips.textHeight + 15, 10, 10);
graphics.endFill();
}
}
}
使用方法:
//Code:
//鼠标提示框
private var mtips:MouseTip = new MouseTip();
mtips.setText("This is a test sentense.");
//使用TweenLite对mtips进行alipa缓动
TweenLite.to(mtips, .3, { alpha:0 } );
Advanced ActionScript 3.0 Animation出来了。
十二 25th
据作者的博客 ,如果在amazon上预定过的话,那么很快就可以拿到书了。26.39美刀,还有邮费会比较恐怖。乖乖等待电子版或者国内发行吧:)
另外,Green Sock在征集缓动平台的意见,如果对TweenLite,TweenMax,TweenGroup 的发展有啥意见,可以到这里留言
让dispatchEvent更高效
十二 11th
原文:《Making dispatchEvent More Efficient》
在很多项目中有许多的事件被广播出去,但没有接收者侦听他们。这不应该成为问题,但它原来的Flash Player处理这些事件的效率低下。幸运的是很容易修补这个情况。
以下的代码将比标准的dispatchEvent在没有事件侦听时高出5倍的效率
Code:
override public function dispatchEvent(evt:Event):Boolean {
if (hasEventListener(evt.type) || evt.bubbles) {
return super.dispatchEvent(evt);
}
return true;
}
请注意,实际的时间差距非常小(在我的测试中,做了100,000个迭代,使用了以上方法花费了80ms,使用标准方法花费450ms),因此这种方法比较适用于大量没有事件侦听的实例。
举个例子,我在GTween 中使用了这种方法,您可以同时使用成千个缓动活动,每个缓动活动在每帧都会广播出CHANGE事件,通常的,我们会创建没有侦听事件的缓动活动。
我相信这个方法在所有情况下都是可行的,虽然我还没有广泛测试与不太常见的活动情景。事件冒泡也会进行,但是不能获得任何的性能提升。
这样的方法同时也会使得有事件侦听的性能减弱,但是非常微小(<10%,在我的100K 迭代测试中分别为505ms和545ms)
PS:虽然这种方法只有在少数情况下才会使用到,而且性能提升不是很大。起到了抛砖引玉的作用,呵呵。
25行的AS代码能做什么?
十二 10th
在AS3CN看到zhengenru2008 发的25行AS能做出什么?
打开http://www.25lines.com/?page_id=139 一看,的确很强悍,仅仅25行的代码实现了很多精妙绝伦的效果。
http://www.25lines.com/finalists/0812/043.swf 这个小游戏挺有意思,哈哈,回到了DOS时代~
PS:原来这个25行的活动是著名的Keith Peters大师发起的。