让drawRoundRect抗锯齿的最简单的方法:
让x和y坐标为小数:
this.graphics.lineStyle(0,0,1);
this.graphics.drawRoundRect(10.5,10.5,100,100,20);
今天在FlashSeer的群里面讨论得出的结论,太经典了。平时让我们头痛的小数坐标现在居然能起到这个作用。这样也避免了位图的引入,提高了程序灵活性。
啥也不说了,去这里看视频:http://brajeshwar.com/2008/cc-to-actionscript-compiler/
一旦网络游戏开始基于ActionScript技术,Adobe的市场前景将不可限量。
资源:
一些测试类库:
http://labs.adobe.com/wiki/index.php/Alchemy:Libraries
Alchemy(炼金术)简介:
http://labs.adobe.com/technologies/alchemy/
相关下载:
http://labs.adobe.com/downloads/alchemy.html
相关论坛:
http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid=72&catid=755&entercat=y
在这里可以看看Flash CS4的新特性。作者Lee的演讲非常清晰,即便英语不好,只要懂一点Flash知识也一定能看明白。
其中降到了一些非常有趣的新特性:
- 布局模式(为不同角色设计:Developer、Debugger、Designer)
- 3D动画效果
- 新的时间轴
- 强大的动画编辑器(包括一些预设的效果)
- 骨骼动画(甚至可以自动生成可拖拽骨骼效果的ActionScript代码)
- 新的Project(项目)面板:Adobe收购的gProject(Skinner大牛的作品)Flash CS4的开发和Flex Builder有的一拼了,例如新建ActionScript类等。
- Kuler面板
- 我就不废话了,视频演示如下:(Via)。
由于事件(Event)的特殊性,在继承(inheritance)中,往往容易被我们所误用。
一个简单的例子:
某类A继承自Sprite
package
{
import flash.display.Sprite;
import flash.events.Event;
public class A extends Sprite
{
function A(a:String = "t")
{
super();
trace(a);
this.addEventListener(Event.ADDED_TO_STAGE, init);
}
protected function init(e:Event):void
{
trace("A added!");
}
}
}
某类B,继承自A
package
{
import flash.display.Sprite;
import flash.events.Event;
public class B extends A
{
function B()
{
super(’x');
trace("B");
//this.addEventListener(Event.ADDED_TO_STAGE, init);
}
protected override function init(e:Event):void
{
super.init(e);
trace("B added!");
}
}
}
文档类代码:
var b:B = new B();
addChild(b);
可以看到,最优雅的方式是:
- 在子类B中,如果继承自父类的函数已经添加了侦听器(这里是构造器),那么事件是会有响应的,不必再添加侦听器
- 如果子类B中没有init,那么将执行父类的init回调函数(callback Handler)
- 如果子类B中有init,那么有两种可能:一种是把A、B两个类的init全部写为private的,与上面一样,B的init不会被事件触发。不过,这种需求很少遇到
- 我们经常遇到的需求是,需要B执行回调函数,但有一些特定的功能。就如同我们常用的override一样,因此,我们把A、B的init都定为protected的;注意,B的init前面要加修饰符override
- 然后,在B的init里面,用super.init()调用父类的init函数,剩下的部分写入B需要的逻辑即可。
If there are any English readers, feel free to contact me via LinkedIn.
注意:本文可能存在更多解释,没有时间一一考证了。
今天,遇到一个棘手的错误:
TypeError: Error #1010: A term is undefined and has no properties.
这个错误令人有些无所适从,毕竟你根本不知道这个“term”究竟是哪个。
不过,一翻折腾后,我终于找到了元凶:原来,是在在引用一个已定义对象的未定义属性时,将这个属性再次作为对象来引用时出错。
有点绕口,不过看代码就明白了:
简单的例子我就不做变量类型声明了,直接写在AS3的MainTimeline上:
代码片段一:
var o = {};
o.a = 5;
trace(o.a); // 没问题
trace(o.b); // 引用未定义对象,输出undefined
代码片段二:
var o = {};
o.a = 5;
trace(o.a); // 没问题
trace(o.b.c); // 引用已定义对象(o)的未定义属性(b)作为对象的某一属性(c)
这时候不再简单地输出undefined,而是输出开头的错误。
有一些项目由于参与人数多,维护周期长,如果采用Flash Authoring Tool(即FlashIDE,也就是我们传统意义上的Flash制作工具)来编译SWF,会在项目后期造成极大的麻烦。缺点如下:
- FLA不是文本文件,无法参与版本管理
- FLA与Flash编辑工具的版本相关,兼容性不好
- Flash IDE不是免费的
因此,我们需要采用免费的mxmlc等其他编译工具。
一些经验如下:
- 失去了宝刀trace之后,mxmlc的调试起初会令人很不适应。这时候我建议用Firebug配合调试。在Flash中建立一个类,并设置静态方法,如下:
internal class Debugger
{
import flash.external.ExternalInterface
public static function echo(info:String):void
{
try{ExternalInterface.call("console.info",info);}catch(e:Error){}
}
}
我这里是一个internal类,你也可以重新建立一个debug的package,看个人习惯了。
目的就是通过ExternalInterface来将需要输出的参数输出给Firebug的console panel。最大的好处就是,避免了非DisplayObject无法跟踪文本编辑框的麻烦。我个人是非常推崇这种做法的 - Embed外部资源是摒弃Flash编辑环境后最重要的一个“标签”。由于不再有Flash方便的类绑定,因此要采用这种一开始我们不太习惯的绑定方式:
[Embed(source="/www/projects/google/TEST/assets/TEST.png")]
public static var cursorBitmap:Class;
注意,路径一定要指向相应的文件,建议采用绝对路径以避免不同的package中相对路径不统一的麻烦 - 由于项目需要,我最近才开始接触mxmlc和Linux下的编译,欢迎诸位高手与我分享经验:)
代号为3551的警告也许是我最喜欢的一条警告了,它告诉我们,使用appendText方法可以大幅度提高效率。
原文:
Warning: 3551: Appending text to a TextField using += is many times slower than using the TextField.appendText() method.
我这里做了一个测试:
var allFonts:Array = Font.enumerateFonts(true);
var d = new Date().getTime();
for (var i:Number=0;i<allFonts.length;i++)
{
var _f:Font = allFonts[i] as Font;
//a.text+=_f.fontName;
a.appendText(_f.fontName);
}
trace(new Date().getTime() - d);
更改将注释符号,得到的结果是,使用+=需要花费700多毫秒,而使用appendText方法,则把时间消耗控制在了100毫秒之内。
结合http://www.actionscriptversions.com的整理,转载请保留:http://as3blog.com/
Flash4时代:
逻辑控制:if-else
循环:for、while
Flash5时代:
点语法
函数
函数原型链
MovieClip事件
attachMovie动态添加MovieClip
JS风格逐渐形成
Flash6时代:
动态绘图API
更加统一的(JS风格)变量作用域
视频支持(Aw补充,应该是只嵌入AVI视频作预编译)
Flash7时代:
更加与JS一致的风格
增强视频支持(FLV)
Flash8时代:
位图
动态滤镜
On2 VP6视频
Flash9时代:
AS3诞生
二进制数据支持
Flash10时代:
Typed Array(进一步)
像素级滤镜
DisplayObject的3D API
增强的绘图API
底层文本API
在Automattic的项目合作中,收到Raanan的推荐,来自这里的一份有趣提示。
转自CNBETA
一、安装画廊
在网上下载后文件是Adobe Flash CS4 Install Americas.exe,点击选择解压,解压完成,安装开始,以下是截图;
开始菜单
桌面右键
二、功能
2.1 – 主界面
1、CS4的菜单栏进行了界面优化,你会发现更方便的使用;
2、快速更换布局,默认为Essentials,共分为6种布局,方便不同的用户群;
3、把常用工具和属性及图层库集合在一起,更能提升效率;
4、动画的关键帧放在最下方,你是否会发现在下方比上方好?
2.2 – 利用Flash Cs4 AIR 创建跨平台应用程序
细心的朋友,在上面看安装时的画廊就知道,组件里多了Adobe AIR,在“文件“里我们可以看到多了一项AIR Settings,有了发布AIR程序,当然我们可以轻松的创建AIR程序。
2.3 – 分享我的屏幕
大家还记得原来微软发布过Share桌面软件,这个功能跟微软的相似,点击“文件” –“Share my screen”,然后登录,如图。
登录完成后,自动启动Adobe Connectnow程序,把上面的地址发送给对方,也可利用Email进行发送;
多功能协作
2.5 – 崩溃的后果
这年代崩溃也不需要标题,直接意外事故更好,流行。
三、Adobe Media Encode Cs4
利用Media Encoder转换吧,记得原来需要单独下载,现在集成到一起来啦。
四、更多截图画廊
4.1 – Adobe Extension Manager
4.2 – Adobe Desktop
4.3 – Adobe Device Central CS4
4.4 –Adobe ExtendScript Toolkit CS4
4.5 – Adobe Drive CS4
结论
试用了Flash CS4过后,感觉变化最大就是优化了界面,不过遗憾的是Flash CS4测试版中的语言很乱,如 Adobe Extension Manager CS4和Adobe Drive CS4是中文的,Flash CS4 却是英文的,安装也是全中文,不过遗憾的是只能选择4种语言,里面并没有包含中文,一直在想。Adobe应该中文集成到默认语言,这样更多朋友会体验新产品。
Flash CS4最值得让我们选择他的几点好处:
1.CS4带来了最新的AIR程序创建,也许以后你创建安装程序你会选择AIR(自己原来就有这种想法,AIR的安装流程做得非常的漂亮);
2.优化后的界面看起来更漂亮,更适合多显示器使用,默认布局对屏幕大的用户提供了良好的视觉等;
当然更多功能还需大家亲自体验,更多新鲜功能尽在CS4中,一起期待吧。真想ZzZzZz/..
Flash Cs4测试版下载:QQ中转站 (提取码 57f33f01)
Flash Cs4破解文件:QQ中转站 (提取码 e88b49ef)