读完 AS3 CookBook 的第一章,你有没有被吓到呢?Package、Class 等等一堆的概念扑面而来,Flash AS 似乎换成了一个完全不认识的新面孔。别着急,CookBook 一书的开发环境主要针对的是 Flex2.0,所以都是据此来写的代码(至今我还没有用过 Flex2.0 呢),而且是专业人士的写法,现在我想说的是 Flash CS3 (也就是 Flash9 )中怎么写代码。
Flash 9 里面比 Flex2 多了一个写代码的位置,那就是主场景,在这里写代码还是可以按照以前的习惯来进行,比如把 CookBook 一书第一章第六节的画线代码改写到主场景中去,需要做的只是去掉 import 语句(Flash 环境下可以自动找到相关的类),去掉 package、class 及这两层的花括号,去掉构造函数的定义语句public function ExampleApplication( ) {},去掉 private 关键字,好了,现在的代码仍是 AS 3.0 标准的。看上去和 2.0 标准差别不是很大了吧?
在 Flash9 中新建 Flash 文件 (as3.0标准),在主场景中复制进下面的代码,直接执行就可以看到效果。
var _sprite:Sprite;
_sprite = new Sprite( );
addChild(_sprite);
_sprite.graphics.beginFill(0xff00ff);
_sprite.graphics.drawRect(0, 0, 400, 400);
_sprite.graphics.endFill( );
_sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
_sprite.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
function onMouseDown(event:MouseEvent):void {
_sprite.graphics.lineStyle(1, 0, 1);
_sprite.graphics.moveTo(mouseX, mouseY);
_sprite.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
function onMouseUp(event:MouseEvent):void {
_sprite.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
function onMouseMove(event:MouseEvent):void {
_sprite.graphics.lineTo(mouseX, mouseY);
}
对于 Flash 的爱好者来说,了解一下 OOP 理论是必要的,但对于简单的设计来讲,可以先从简单编程入手,比如通过上面的代码来熟悉一下 AS3 中的主要变化,而不要一上来就被 package、class 搞得晕晕的,没有这些,你只是少了一些自定义类的功能,如果在 AS2 中你几乎就没有写过自定义类,在 AS3 中你同样可以不需要这个,对你来说,AS3 也许只是形式上起了一些变化,很快你就会发现这个新形式更加的规范和简约,就像 Flash 9 中写代码的界面一样,很多的贴心功能,真是很好用,至少空行是可以保留下来了,比以前好看多了。
/************* 2007.5.15 补充以下内容 *****************/
上面的代码在 flash9 中执行时,会出现警告,但可以执行,原因是onMouseMove、onMouseDown 以及 onMouseUp 仍旧是系统的保留字,在这里我们需要的只是普通的函数名,所以换个更“普通”点的名字就不会出现警告了。比如下面的形式:
_sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMsDown);
_sprite.addEventListener(MouseEvent.MOUSE_UP, onMsUp);
function onMsDown(event:MouseEvent):void {
_sprite.graphics.lineStyle(1, 0, 1);
_sprite.graphics.moveTo(mouseX, mouseY);
_sprite.addEventListener(MouseEvent.MOUSE_MOVE, onMsMove);
}
function onMsUp(event:MouseEvent):void {
_sprite.removeEventListener(MouseEvent.MOUSE_MOVE, onMsMove);
}
function onMsMove(event:MouseEvent):void {
_sprite.graphics.lineTo(mouseX, mouseY);
}
回复Comments
作者:
{commentrecontent}