112010
 

今天遇见一件十分诡异的事情,按照标准的程序把字体编译进去,发现”方正少儿简体”愣是无法编译进去,查了点资料,终于搞定了这个问题,原来只是一个编译参数的问题。瀑布汗……

-managers=”flash.fonts.AFEFontManager”

另外,”Flash中文嵌入助手“这个小工具不错:)
关于AS Project编译字体的延伸阅读:

天地会新闻资讯版块有这么一篇:借助Ruby为Flex自动编译字体
Gotoandlearn 的 Learn the best practices method of creating and using external font SWF files using Flash CS4

大脸猫同学的字体嵌入方法连载也很不错,推荐不熟悉的同学阅读

2010/05/24 Update:关于Flex Manager 的那些事儿,请阅读About the font managers

012009
 

平常开发中,如果我们要对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的插件。

Continue reading »

132009
 

先做个题目吧:

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/ 这位老兄也同样遇到了这个问题,不过他比我解释地更为清楚,因此引用一下:)

312009
 

原文:Another Reason to Love TweenLite

从Google Reader中看到这边文章的确被雷到了,的确是好方法。

而通常来说,如果我们要在某一特定时间后执行某一方法需要一个Timer。但是原文的博主采用了一个比较奇妙的方法,使用了TweenLite巧妙地实现了此功能。

TweenLite.delayedCall(0.5, myFunction, [param1,param2]);

272009
 

代码分离是一个很好的编程习惯,可以让显示和逻辑分开,使得程序的结构更为明了。其中微软的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开发。

192009
 

翻译自: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;

下载:

http://www.uza.lt/download/2

042009
 

因为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.isdada.com
	 * @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 } );
十二 252008
 

作者的博客 ,如果在amazon上预定过的话,那么很快就可以拿到书了。26.39美刀,还有邮费会比较恐怖。乖乖等待电子版或者国内发行吧:)

另外,Green Sock在征集缓动平台的意见,如果对TweenLite,TweenMax,TweenGroup 的发展有啥意见,可以到这里留言

http://blog.greensock.com/sneak-peek/

十二 112008
 

原文:《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:虽然这种方法只有在少数情况下才会使用到,而且性能提升不是很大。起到了抛砖引玉的作用,呵呵。