返回织梦建站服务网首页 业界新闻 教程文档 资源下载 酷站鉴赏 免费服务 站长工具
织梦建站工作室
织梦建站论坛
载入中…
专题栏目
最新热门
>>更多热门...  
最新推荐
>>更多推荐...  
  您现在的位置: 织梦建站服务网 >> 建站教程 >> WEB多媒体 >> Flash >> 教程正文
AS3学习笔记            
HITS: TIME:2007-4-27 9:57:44 AUTHOR:eidiot URL:蓝色理想
CONTENT INTRODUCE :
放大文字  缩小文字  发表评论  加入站内收藏夹  告诉好友  打印模式  关闭窗口 

作者的Blog: http://eidiot.net/

首先 say hello 一下,在输出面板 trace 出 “Hello World!”。复习一下AS2的类代码:

class net.eidiot.learnAS3.HelloAs2{
    public function HelloAs2(){
        trace("Hello World!");
    }
}

为了让这段代码工作,需要在Flash IDE里场景的第一帧输入代码:

import net.eidiot.learnAS3.HelloAs2;
var hello:HelloAs2 = new HelloAs2();

再来看看AS3的类:

package net.eidiot.learnAS3
{
    import flash.display.Sprite;   
    public class HelloAs3 extends Sprite
    {
        public function HelloAs3(){
            trace("Hello World!");
        }
    }
}

打开Flash 9,在文档属性的“Document class”里输入包名和类名,如图:

下面来看看区别。在AS3的类里多了一个package关键字,后面跟上类的包名(如果fla和类放在相同的文件夹就可以什么都不跟)。这样在声明类的时候就不用带上包名了。

public class HelloAs3 extends Sprite

class 关键字的前面多了一个 public 。在AS3里类还可以是 internal 。如果声明类为 internal 则只有同一个包里的其他类可以引用导入,包外的任何类都将访问不到它。此类继承了 Sprite 。AS3的类如果想使用 MC 的事件或方法必须让它继承 MovieClip 或者 Sprite 。Sprite 可以理解为没有时间轴的 MovieClip 。

最后一步是把它设置为 fla 的 Document class ,这样类 HelloAs3 就和文档 helloAs3.fla 绑定在一起了。关于 Document class 可以参考黑羽的文章:
Document Class特色为我们带来了什么

是不是感觉AS3太麻烦了?高射炮打蚊子,是要费劲一点的。

源文件: hello.rar

尝试用AS3做一个简单的计数器。先来看看最后的效果:

实例效果查看类代码

public function ShowTimer(){
    stage.scaleMode = StageScaleMode.NO_SCALE;
    stage.align = StageAlign.TOP_LEFT;
    initMc();
}

AS3里新加了很多的常量来代替字符串。这给我们带来了很大的方便。比如要限制影片的缩放模式为固定尺寸,AS2时的代码为

Stage.scaleMode = "noScale";

值是一个字符串,在输入的时候是没有代码提示的,很容易输错(我经常是到帮助文档里把字符串复制过来)。而在AS3里的代码为:

stage.scaleMode = StageScaleMode.NO_SCALE;

原来的字符串 “noScale” 由常量 StageScaleMode.NO_SCALE 代替。这样可以使用代码提示自动完成,有效避免了因为输错而造成的程序bug(而且很方便  )。同样的字符串常量还有一些事件类型比如 MouseEvent.CLICK 代替”click” 等等。

private function initMc():void{
    showTxt = new TextField();
    addShow(showTxt,10,10,310,20);
    addLabel(setDelayLabel,10,40,"delay:");
    //...other code
}

添加文本框和按钮。注意,需要再次引用的文本框必须显式初始化,否则在其他地方引用此变量将返回 null 。

private function addLabel(txt:TextField,x:uint,y:uint,text:String):void{
    txt = new TextField();
    txt.x = x;
    txt.y = y;
    txt.text = text;
    addChild(txt);
}

AS3里所有的东西都是 new 出来的。仅仅 new 出来还不行,必须使用 addChild() 把它添加到显示列表里。

private function addBtn(mc:Sprite,...,clickHanlder:Function):void{
    mc.mouseChildren = false;
    mc.graphics.beginFill(0x000000,0.3);
    mc.graphics.drawRect(0,0,w,h);
    mc.buttonMode = true;
    mc.addEventListener(MouseEvent.CLICK,clickHanlder);
    addChild(mc);
    //
    txt = new TextField();
    txt.name = "btnText";
    mc.addChild(txt);
}

在AS3里想要 mc 成为一个按钮必须设置:

mc.buttonMode = true;

这时看到鼠标经过mc时并没有变成手形,原因在最后一行,把 txt 添加到了 mc 里用来显示按钮文字,以致鼠标事件的目标对象为txt而不是期望的mc。为了解决这个问题需要加上一句:

mc.mouseChildren = false;

以保证mc为鼠标事件的目标对象(target objects)。

AS3里所有的可见对象都是DisplayObject的子类,而DisplayObject是EventDispatcher的子类

Sprite → DisplayObjectContainer → InteractiveObject → DisplayObject → EventDispatcher → Object

也就是说所有的可见对象都可以直接addEventListener。

mc.addEventListener(MouseEvent.CLICK,clickHanlder);

这里用常量 MouseEvent.CLICK 代替了事件类型 “click” 。此类常量以后不再赘述。

mc.graphics.beginFill(0x000000,0.3);
mc.graphics.drawRect(0,0,w,h);

AS3里所有的绘图方法都放在了 Graphics 里。Sprite的graphics属性就是一个Graphics。除了基本的 beginFill ,beginBitmapFill 之类,又增加了新的 drawCircle 、drawEl

[1] [2] [3] [4] 下一页

教程录入:jerome    责任编辑:jerome 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

    相关教程
    浅谈flash web的结构
    A*寻路,二叉堆优化及AS3实现
    Apollo是危险的吗?
    Apollo 开发技巧
    APOLLO 未来畅想
    Flash纯脚本生成饼图
    基于flash的360虚拟现实引擎实现
    XML动态菜单
    Flash破解与加密
    Flash AS2 中的拍照图片无损压缩
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    湘ICP备05010790号 {$Wap}
    关于我们 | 版本历史 | 联系方法 | 隐私条例 | 链接我们 | 广告服务 | 常见问题 | 友情链接 | 网站公告 | 设为首页 | 收藏本站
    Copyright © 2001-2006 17zm.NET All Rights Reserved.  织梦建站工作室[织梦建站工作室]™荣誉出品. Since 2001