Flash ActionScript 3.0 面向对象入门教程

深入理解AS3中的Package组织代码应用 ActionScript 3.0(简称AS3)是Adobe公司推出的一种面向对象编程语言,它通过包(Packages)的概念支持了模块化编程。包是类和接口的集合,它们被组织在一个命名空间中,这样可以防止命名冲突,并为类和接口提供了访问控制。在AS3中,访问修饰符可以应用于类的属性和方法。以下是一些关于publicprivate和protected修饰符的基本信息:public(公开的):这是默认的访问级别。所有具有public访问级别的成员都可以从任何其他代码中访问。 阅读详情

Flash ActionScript 3.0 面向对象入门教程

面向对象的难点部分就是理解变量作用域修饰符(modifier)其实也就是面向对象中我们已经熟悉的public、protected、private等等。本文还深入讨论了ActionScript3中新增的internal 等概念。下面我依次列出:

一、关于package以及internal
package,用“形而上学”的方式理解,就是物理目录下的类集合。在AS2中只需要保证文件系统的路径匹配,然后用类似“import com.awflasher.someUtils”的方法导入即可。而AS3则要求您在所有的类中声明package关键词。package的大括号对 “{}”内,我们只能定义一个类,我们可以在这个大括号外面定义一些辅助类,不过这些类只能被当前这个类(你在package大括号对内定义的类)访问。当然,一个package大括号对内只有一个类,这并不代表一个package内只有一个类。你可以在同一目录下定义多个属于该package(指代这个目录)的类。它的意义绝不是简单的“类文件集合容器”,而是一个让各种应该协同工作的类集中到一起的项目包。值得一提的是,所谓“协同工作”是指至少有一个class要引入其他一些class 来进行功能设计,而这时候采用internal修饰可以省去很多getters和setters。我自己回忆起在湖南卫视的项目中用AS2开发的 Vplayer,两个类AVCore和AVControl就有很多getter和setter,搞的特别麻烦。

internal类似public,但限定在一个 package内了。在同一个package 内的类可以访问同一个package 内其他类的internal 变量,而其他包内的类无法访问。 package 与类的继承性毫无关系,比如TextField 和Sprite、MovieClip 都继承自DisplayObject 类,但TextField属于 flash.text包,而MovieClip和Sprite 属于flahs.display 包。也就是说,包对类的限定是与继承链毫无关联的、一个新的 “维度”的限定。

附:使用一个类的时候,我们必须import这个类,或者包含这个类的package。AS2时直接写完整包路径的使用方法在AS3中不管用了,本文后面有详细介绍。

二、关于public
public定义的类或者属性可以在任何作用域内由任何来源访问。构造函数永远都是public的,Flex中的应用程序类(Application Class)和Flash CS3中的文档类(Document Class)必须是public的。且不能缺省public这个关键词声明。我在测试中发现,如果不声明public,Flash根本就不会获取类的定义,进而编译无法通过。

三、关于protected
protected声明类似AS2的private,它定义的属性只能在自己子类中可见,而其它场合都是不可见的。这一点与Java等传统OOP语言类似。

四、关于private
注意AS3的private和AS2的private大不相同,它定义的属性只属于自己,子类可以定义毫无牵连的同名属性。
dynamic 和原来AS2的dynamic一样,用dynamic声明的类可以动态的加入属性。这些属性也可以通过delete来删除。动态加入的属性一旦被切断所有的引用就会被垃圾回收机制自动回收。有时候用System.totalMemory检测不到内存释放是因为垃圾回收机制并不是即时运行的。

五、关于dynamic
动态(dynamic)类允许在运行时动态地添加属性,常见的动态类有MovieClip和顶级(top-level)的Array。如果您的自定义类要继承于动态类,那么请也定义为动态的,不要省略dynamic关键词。

六、关于继承(extends)和override
继承其实并不太复杂,唯一要说明的就是:子类的构造函数一定要用“super”调用一次父类的构造函数,否则报错!对于继承后的子类,如果要重新定义父类的非private方法,必须使用override关键词。在override的时候,如果我们需要调用父类的方法,可以使用super关键词(由于继承方法在逻辑上与父类往往有相似性,因此没有必要把方法逻辑完全重写)官方帮助中的这个例子非常易懂:
package {
import flash.display.MovieClip;
public class SuperExample extends MovieClip
{
public function SuperExample()
{
var myExt:Extender = new Extender()
trace(myExt.thanks()); // output: Mahalo nui loa
}
}
}

class Base {
public function thanks():String
{
return “Mahalo”;
}
}

class Extender extends Base
{
override public function thanks():String
{
return super.thanks() + ” nui loa”;
}
}

override不能用于重载变量(成员属性)。但是却可以用于重写getter 和setter 函数,例如:(官方帮助的例子)
package
{
import flash.display.MovieClip;
public class OverrideExample extends MovieClip
{
public function OverrideExample()
{
trace(currentLabel)
}
override public function get currentLabel():String
{
var str:String = “Override: “;
str += super.currentLabel;
return str;
}
}
}

这个例子中,我们直接重写了MovieClip类的currentLabel 属性。注意调用父类属性的时候,用了super.currentLabel。

关于静态方法,比较麻烦。首先,静态方法是无法被重载的。必须通过类来访问。但是您也可以自己定义与静态方法同名的方法,我把官方的例子做了一下修改就一目了然了:

package
{
import flash.display.MovieClip;
public class StaticExample extends MovieClip
{
public function StaticExample()
{
var myExt:Extender = new Extender();
}
}
}

class Base {
public static var test:String = “static”;
}

class Extender extends Base
{
private var test:String = “instance”;
public function Extender()
{
trace(Base.test); // output: static
trace(test); //added by awflasher.com, output: instance
}
}

七、关于import语法
在AS2时代,“import”语法只是为了让编程时代码简洁(省去了包名),比如我们import了mx.transitions.Tween之后,就可以直接new Tween()了。而如果不import,我们也可以直接用全类名来构造实例,例如:new mx.transitions.Tween();

然而,在AS3中,无论是否采用全名类声明,只要你用到这个类,就必须import。import 估计是传统Flash程序员所需要养成的一个最大的习惯,在刚切入AS3开发平台的时候,我常常忘记import一些常用的类,例如从IDE 指向过来的文本和渲染元件,以及flash.event.*、flash.display.StageAlign等比较泛用的类。

AS3中不像AS2那样,我们不能用_root和Stage[”displayState”]来进行hacks了。

八、关于编译时的注意事项
AS3不再像AS2那样简单地Compile-Time(编译时,即FlashCS3/FlexBuidler/其他编译器发布ActionScript 及所有资源为SWF文件的那一时刻)进行类型检测了,AS3在Run-Time(运行时,级Flashplayer 或者其他播放SWF的软件在播放SWF 的时候)也有类型检测,因此AS2的Hacks(强制访问不能访问的属性)将不再有效。

九、一个不得不说的好消息
AS3中类所有的变量(属性)和函数(方法)的作用域都是运行时跟类/实例走的。这与AS2大有不同,我们不再需要去Delegate了。只要是类自己的方法,在调用的过程中,this永远指向类自己(实例)。

简要总结:
1、如果我需要属性公开,并且可以被自己的子类继承,那么定义成public的。子类也可重写(override)之。
2、如果我需要属性隐藏,但是可以被自己的子类继承,那么定义成protected的。与public类似,子类也可重写(override)之。
3、如果我的某一个类有一个属性不想在任何位置可见,包括其子类,那么定义为private的。其子类无需重写(override),因为它根本就不存在于子类中。

 
Flash ActionScript 3.0动画高级编程实战教程 ActionScript 3.0中,创建类是面向对象编程的基础。类定义了一组对象的属性和方法。属性是对象的状态,而方法则是对象的行为。下面是一个简单的类定义示例:// 属性:姓名// 属性:年龄// 构造函数:用于初始化对象属性// 方法:用于描述对象的行为接口在 ActionScript 中是一种特殊类型,它定义了一组方法但不实现它们,允许类实现这些方法。接口有助于实现抽象和模块化。 阅读详情

相关推荐

Adobe Flash ActionScript 3.0动画制作完整教程

ActionScript 3.0是Adobe公司开发的基于ECMAScript标准的一种面向对象编程语言,它是Flash Player和Adobe AIR应用程序的主要编程语言。ActionScript 3.0以其高性能、强大功能以及面向对象的编程范式,成为了构建丰富互联网应用(RIA)的首选语言。类的定义已经通过上面的例子说明,实例化类的对象非常直接。以下是实例化的具体操作:// 创建Animal和Dog类的实例// 使用对象调用方法。

weixin_28840811的博客 1275

Flash CS3 Action Script3.0 类编程入门到精通 下载地址

Action Script3.0Flash CS3 AS3 类入门到精通》共分为五章,200集,23个小时,从基础到复杂的类操作都进行了详细的讲解,即使你没有接触过Flash编程一样可以轻松掌握。

深入掌握Flash ActionScript3.0:入门到精通教程与示例

函数是组织代码逻辑的基本单位。在ActionScript 3.0中,可以使用function关键字定义函数,并通过函数名调用它们。// 输出: Hello, World以上章节覆盖了ActionScript 3.0的基础语法知识,为后续章节中的面向对象编程、类型系统、事件处理等高级主题打下坚实基础。面向对象编程(OOP)是现代编程语言的核心范式之一,它以对象为基本单位,通过封装、继承和多态性来构建软件系统。

weixin_33610780的博客 1360

Flash ActionScript 3.0编程技术教程(全)

本书全面介绍了ActionScript 3.0的基本语法、类的架构以及面向对象程序的设计理念。内容安排上既适合刚刚接触到ActionScript脚本语言的初学者,也照顾到学习过ActionScript之前版本有一定编程经验的读者。 鉴于ActionScript 3.0较之前版本的变化,为了适应更多的读者,本书没有过多强调ActionScript 3.0ActionScript 2.0的区别,而是直接从ActionScript 3.0的语法结构、编写习惯开篇,由浅入深展开讲解。第1~5章介绍了 ActionScript 3.0的基础知识,包括程序编写界面、数据结构、基本语法以及事件机制;第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript 3.0中常用类的使用、显示编程和组件类;第10、11章分别介绍了几个ActionScript 3.0实际应用的范例,包括网站制作、游戏制作和桌面应用等。 本书以ActionScript 3.0体系结构为主线,附以大量的范例进行讲解。无论是基本的语法还是类的设计与应用,都配有丰富、生动的范例代码帮助读者理解,使学习过程变得轻松而又高效。 本书既适合Flash ActionScript初学者使用,也适合有一定编程基础的学习者进一步深造使用。可作为自学教材和各级培训用教材。

AS3中public internal private protected的区别

protected Java與AS3中的一點不同。AS3中的protected修飾類型,於java中略有不同。 Java中使用protected修飾的类、类属变量及方法,包内的任何类,及包外的那些继承了此类的子类都可以访问; 但是AS3中的protected,將會使你的類變

林中白狼 2257

flash3D学习1

今天正式学习flash3D。 先配置: 这样配置好了。 接下来是第一个flash3D。 import flash.display.MovieClip; import flash.events.Event; import flash.display.Stage; import away3d.primitives.WireframeSphere; import away3d.conta

jianqiu000的专栏 721

AS3.0 RemoteObject 与 包内类 internal

以前都没怎么考虑到这个问题,但是现在却遇到了。 我为工厂内部定义了一个内部类称作EMProject,工厂只为外部创建接口IEmproject,不允许用户从外部调用某些方法来修改Project。而我必须要保存这个Project,项目中使用了AMF编码协议,我将整个Project 利用writeObject方法写入文件中,如下: [code="java"] [RemoteObject(ali...

toEncore.java 276

As3定义包内类

<br />AS3中可以在一个类的包外面定义其他的类,并且在这个类中引用包内类:<br />package com.custom.utils<br /> {<br />     public class TFunction<br />     {<br />         public var minus:Function;<br />         public static const m:int = 10;<br />         public const n:int = 20;<

wkyb608的专栏 1480

FALSE课程设计--开卷有益:Flash ActionScript 3.0动画与交互式内容创作

本文还有配套的精品资源,点击获取 简介:该项目课程设计针对FALSE(Flash ActionScript 3.0)初学者,旨在掌握这个强大的动画和交互式内容创作工具。FALSE指Adobe Flash Professional中的ActionScript编程语言,是动态网页、游戏和多媒体应用程序开发的关键。课程设计可能包含从基础到进阶的FALSE教程,涵盖界面操作、代码编...

weixin_36235398的博客 980

使用ActionScript 3.0控制Flash动画播放

Flash是一个由Adobe公司开发的动画和多媒体平台,它允许设计师和开发者创建动画、游戏和应用程序。ActionScriptFlash的编程语言,用于控制Flash内容的行为。

2301_79940194的博客 1167

Flash中利用ActionScript3.0实现图像的扭曲效果

主要在Flash CS3环境中利用ActionScript3.0脚本语言的BitmapData 类和DisplacementMapFilter滤镜来实现图像的扭曲效果。

FLASH+ACTIONSCRIPT3.0从入门到精通PDF版

这是《FLASH+ACTIONSCRIPT3.0从入门到精通》的PDF版,上次发了一下,不知道怎么没发上去再发一下试试

ActionScript3.0(Flash编程)电子教案.ppt

ActionScript3.0(Flash编程)电子教案

flash actionscript3.0

今天学习下圆运动 以太阳 地球 月亮为例 主要内容是                 earth.x=sun.x+120*Math.cos(n);                 earth.y=sun.y+120*Math.sin(n); sun.x sun.y是圆的

uuq的专栏 1233

Flash ActionScript 3.0动画开发高级实战教程

函数通过function关键字声明,可带参数与返回值:// 输出: Hello, Bob函数是构建模块化代码的基础,为后续面向对象编程做好铺垫。ActionScript 3.0 使用来定义类,类文件必须与类名一致,并放在正确的包路径下。package {在实际开发中,我们经常需要根据业务需求创建自定义类。本节将通过一个完整的示例,展示如何设计并使用一个自定义类。_vy *= -1;

weixin_35370061的博客 976

ActionScript 3.0实用代码手册

本文还有配套的精品资源,点击获取 简介:《ActionScript 3.0 Cookbook》是一本面向Flash平台交互式内容开发者的实用指南,涵盖大量代码示例和问题解决策略。本书着重介绍ActionScript 3.0版本,强调面向对象编程概念和实际问题解决能力的提升。书中包括对事件处理、图形绘制、动画制作、网络通信、音频和视频处理等方面的深入探讨。每一节都提供实际的解...

weixin_42311427的博客 1682

ActionScript3.0实作:Flash点灯游戏全攻略

ActionScript3.0中的类是构建面向对象程序的基础。一个类可以被看作是创建对象的蓝图,提供了一组方法(函数)和属性(变量),它们共同定义了对象的外观和行为。类允许开发者封装数据和功能,从而提高代码的重用性、可维护性和可扩展性。在游戏开发中,使用类可以很好地组织游戏逻辑和管理游戏状态。以下是ActionScript3.0中类的定义和使用的简单示例:die();在上面的代码中,类有私有成员变量_name和_health。

weixin_35509395的博客 1023

Flash游戏开发的新纪元:ActionScript 3.0的崛起

本文深入探讨了Flash游戏开发的变迁,特别是ActionScript 3.0的发布如何标志着一个新的游戏开发时代的到来。从Flash的早期版本到ActionScript 3.0的革命性变化,文章详细描述了Flash游戏开发者的兴奋点以及为何ActionScript 3.0成为了中小型游戏开发的首选工具。

weixin_28968525的博客 939
下一篇: 最简单的wxPython程序
symware
博客等级 码龄19年 2粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值