龙图教育:AS3方法和技巧(3)

2020-05-07 09:10

SimpleButton类中包括四个决定按钮状态的属性:upState,overState,downState和hitAreaState.创建显示对象来表示这些属性,这样,用AS3就能创建一个全功能的按钮元件.

myButton.upState = mySprite1; myButton.overState = mySprite2; myButton.downState = mySprite3; myButton.hitAreaState = mySprite4;

15.数组定义中的逗号

AS3使用括号操作符来快速定义数组,可以像PHP中那样在最后一个元素后面保留一个逗号,这样在多行数组定义中能少错误的操作.

var myList:Array = [ \\\\];

在AS1和AS2中,元素”fox”后面的逗号会引起错误的出现,但在AS3中不会了. 注意:上述操作只对[]有效,对于Array()或者new Array()是无效的.

var myList:Array = new Array( \\\\);

//error

16.包块

AS3中的包(package)和AS2中在定义方式有一点不同,在AS3中,包(package)的路径不再作为类定义的一部分,而成了关键字package来定义的一部分. 程序块定义基本结构(AS3):

package my.package.path { class MyClass { } }

程序块定义基本结构(AS2):

11

// ActionScript 2:

class my.package.path.MyClass { }

实际上,AS3中所有的类文件都需要定义成为一个package块,尽管可能这些类并不一定在同一个包中.

package {

class NotInAPackageClass { } }

一个package块中可以定义类,也可以只是定义函数.但package块中的类或者函数名必须与文件名(除去.as扩展名)相同.如一个package块定义一个函数中:

package com.kirupa.utils {

function StripString(str:String):void { // ... } }

这个文件必须命名为StripString.as,放在com/kirupa/utils文件夹中. 17.同文件中的助手类(Helper Class)

无论是AS2还是AS3,类都被定义在.as文件中.AS3有了进步,可以用额外的助手类(helper classes)来扩展主类(primary class),这些助手类和主类定义在相同的.as文件中.助手类(helper classes)在主类定义之后定义,它只对同一文件中package块中定义的主类(或者函数)或者其它助手类可见.

package {

class MyClass {

function MyClass() {

var helper:MyHelper = new MyHelper(); } } }

class MyHelper {

function MyHelper() {

var helper:HelpersHelper = new HelpersHelper(); } }

class HelpersHelper {

function HelpersHelper () { }

12

}

注意,每一个package块中只能定义一个类,外部助手类不作为package块的一部分,而且它只能被封装在package块内的类使用. 18.访问属性

AS3引入了两个新的访问类成员的方式,而且完善了AS2中的private访问方式,在AS3中有四种控制访问的方式:

public protected private

internal (default)

public:和AS2中一样,public成员可以被任何对象访问.类构造函数一般定义为public类型,应用类(Application classes)需要定义为public类型.

pretected:新增的访问控制类型,protected成员对子类访问继承父类变量有效,从其它类以任何方式访问protected变量都会出现错误.

类和类的构造函数都不能定义为protected方式.

private:AS2中的private属性的工作很像protected,充许子类完全访问private成员,AS3中private成员只能在类内访问,对于其它类,甚至是子类,也不能访问类中的private成员,这样,在子类中定义一个与private对象同名的新成员,也不会引起冲突,因为private对象在超类(superclass)中完全隐藏了.

类和类的构造函数都不能定义为private方式.

internal:和public相似,但在访问程序包(package)有限制,在同一程序包中(package)类可以任意访问其它类中的internal成员.但在其它package中的类不能访问别的package中类的internal成员.

类和类成员默认访问类型是internal,但构造函数默认为public

在helper classes中的访问控制有一点点不同,因为helper Classes原则上不属于package,它们的internal访问只限于同一文件内的类,它们在定义时默认为internal访问.(注意:主类不能用helper class扩展,只能在同一个文件中用一个helper class扩展另一个helper class.)

一些注意:无论是在编译时,还是在runtime中,AS3中访问控制都是有效的.用AS2去访问隐藏方法的黑客程序(Hacks)对于AS3不再有效. 作者写的几个例子:

package {

import flash.display.Sprite;

// Application class needs to be public (internal by default) public class AccessControl extends Sprite {

// constructors are always public function AccessControl() {

13

// only classes in this file // can access helper classes

var helper:Helper = new Helper();

trace(helper.pubNum); // OK

// trace(helper.protNum); // Error - cannot access protected // trace(helper.privNum); // Error - cannot access private trace(helper.interNum); // OK } } }

// Helper class is implicitly internal class Helper {

// public access granted anywhere // variables are usually protected or

// private with get/set used for public access public var pubNum:Number = 1;

// protected access granted only for // subclasses in that class

protected var protNum:Number = 2;

// private access granted only in this class private var privNum:Number = 3;

// internal access granted only in the same // package, but for helper classes, it means // only in the same file

internal var interNum:Number = 4;

// constructors are always public function Helper() { } }

// SubHelper class is implicitly internal // can extend other helper classes class SubHelper extends Helper {

// constructors are always public function SubHelper() {

14

trace(pubNum); // OK

trace(protNum); // OK - inherited

// trace(privNum); // Error - cannot access private trace(interNum); // OK } } 2.

package {

import flash.display.Sprite; import containers.*;

// Application class needs to be public (internal by default) public class AccessControl extends Sprite {

// constructors are always public function AccessControl() {

// can access classes in other packages // only if public

var bowl:Bowl = new Bowl(); // OK

// var basket:Basket = new Basket(); // Error - cannot access internal

trace(bowl.pubNum); // OK

// trace(bowl.protNum); // Error - cannot access protected // trace(bowl.privNum); // Error - cannot access private // trace(bowl.interNum); // Error - cannot access internal } } } 3.

package containers {

// public class accessible anywhere public class Bowl {

// public access granted anywhere public var pubNum:Number = 1;

// protected access granted only for // subclasses in that class

15


龙图教育:AS3方法和技巧(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:深圳黑弧广告-员工手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: