今天遇见一件十分诡异的事情,按照标准的程序把字体编译进去,发现”方正少儿简体”愣是无法编译进去,查了点资料,终于搞定了这个问题,原来只是一个编译参数的问题。瀑布汗……
-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
< ActionScript ,字体 >
平常开发中,如果我们要对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的插件。
Read the rest of this entry »
< ActionScript ,AMF >
先做个题目吧:
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/ 这位老兄也同样遇到了这个问题,不过他比我解释地更为清楚,因此引用一下:)
< ActionScript >
原文:Another Reason to Love TweenLite
从Google Reader中看到这边文章的确被雷到了,的确是好方法。
而通常来说,如果我们要在某一特定时间后执行某一方法需要一个Timer。但是原文的博主采用了一个比较奇妙的方法,使用了TweenLite巧妙地实现了此功能。
TweenLite.delayedCall(0.5, myFunction, [param1,param2]);
< ActionScript ,TweenLite >
代码分离是一个很好的编程习惯,可以让显示和逻辑分开,使得程序的结构更为明了。其中微软的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开发。
< .Net ,ActionScript >
翻译自: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
< ActionScript ,Class ,Component ,Flash ,Flex >
因为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 } );
< ActionScript >
据作者的博客 ,如果在amazon上预定过的话,那么很快就可以拿到书了。26.39美刀,还有邮费会比较恐怖。乖乖等待电子版或者国内发行吧:)
另外,Green Sock在征集缓动平台的意见,如果对TweenLite ,TweenMax ,TweenGroup 的发展有啥意见,可以到这里留言
http://blog.greensock.com/sneak-peek/
< ActionScript ,TweenGroup ,TweenLite ,TweenMax >
原文:《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:虽然这种方法只有在少数情况下才会使用到,而且性能提升不是很大。起到了抛砖引玉的作用,呵呵。
< ActionScript >
Comments