走在网页游戏开发的路上(四)

简介:

AS3

0.  前言

类:面向对象的基础,类是对象的抽象表示形式,类用来存储有关对象可保存的数据类型及对象可表现的行为的信息。

类的定义:

[dynamic] [public | internal] [final] class className [ extends superClass ] [ implements interfaceName[, interfaceName... ] ]

{

    // 此处是类定义

}

ActionScript 3.0中,可使用以下四个属性之一来修饰类定义:

属性

定义

dynamic

允许在运行时向实例添加属性。

final

不得由其它类扩展。

internal(默认)

对当前包内的引用可见。

公共

对所有位置的引用可见。

使用 internal 以外的每个属性时,必须显式包含该属性才能获得相关的行为。请注意,列表中未包含名为 abstract 的属性。这是因为 ActionScript 3.0 不支持抽象类。同时还请注意,列表中未包含名为 private protected 的属性。这些属性只在类定义中有意义,但不可以应用于类本身。如果不希望某个类在包以外公开可见,请将该类放在包中,并用 internal 属性标记该类。或者,可以省略 internal public 这两个属性,编译器会自动为您添加 internal 属性。

若要指示对象可在运行时添加和访问动态属性,请在 class 语句前面放置 dynamic 关键字。若要声明一个类实现一个接口,请使用 implements 关键字。若要创建一个类的子类,请使用 extends 关键字。(某一类只能扩展一个类,但可以实现多个接口。)您可以在一个语句中使用 implements extends

ActionScript 3.0不但允许在类体中包括定义,而且还允许包括语句。

1.  类文件.as

每个ActionScript源文件只能包含一个对其它源文件或脚本可见的类。外部可见的类可以是公共类或内部类,必须在包package语句内定义。如果在同一个文件中包括其它类,则该类必须放在包(package)语句之外、文件结尾处。

外部可见的类的名称必须与包含该类的 ActionScript 源文件的名称匹配。源文件名称必须是类的名称加上文件扩展名 .as。例如,如果您将一个类命名为 Student,则定义该类的文件必须被命名为 Student.as

您不能嵌套类定义:即,不能在一个类定义内定义其它类。

可以定义构造函数方法,每次创建该类的新实例时执行该方法。该构造函数方法的名称必须与类的名称匹配。如果未定义构造函数方法,则为您创建一个默认的构造函数。

ActionScript提供了可以与类的任何属性 (property) 一起使用的一组属性 (attribute)。下表列出了这组属性。

属性

定义

internal(默认)

对同一包中的引用可见。

private

对同一类中的引用可见。

protected

对同一类及派生类中的引用可见。

public

对所有位置的引用可见。

static

指定某一属性属于该类,而不属于该类的实例。

UserDefinedNamespace

用户定义的自定义命名空间名。

 

2.  构造函数

ActionScript 3.0中,构造函数是一个特殊的方法,不能声明返回类型,必须留空。构造函数只能使用public访问控制。如果没有指定访问控制,编译器默认将构造函数设为publicprivateprotectedinternal及其它所有自定义的命名空间都不能用于构造函数。

现在问题来了,在javac#等语言中一般使用private修饰构造函数,阻止实例化,在ActionScript 3.0中构造函数是public的,那么如何实现单例模式,阻止实例化呢?ActionScript 3.0中一般是这样做的:

ActionScript3.0中单例模式

public class ModelLocator extends EventDispatcher

{

public static var _instance:ModelLocator;

public static function getInstance():ModelLocator{

if(_instance == null){

_instance = new ModelLocator();

}

return _instance;

}

 

3.  静态属性和方法

静态属性和静态方法不依赖实例而独立存在。简单地说,即使不创建一个类的实例,也可以访问到该类的静态属性和静态方法。这一点就和实例属性、实例方法完全不同。

静 态属性存储所有对象共同的状态,和任何实例都没有关联。每个对象的实例属性值可以各不相同,但所有类对象的静态属性值是一致的。改变一个对象的实例属性不 会影响到另一个对象的实例属性,但改变一个类的静态属性值则会影响该类所有的对象。静态方法也是独立与所有的实例,静态方法只和每个类绑定,不和类的任何 具体实例绑定。

注:静态方法经常应用到工具类中,工具中包括一系列的静态方法,这样可以不用创建工具类的实例。

4.  getset存取器方法

getset存取器函数还分别称为gettersetter,可以使用这些函数为创建的类提供易于使用的编程接口,并遵循信息隐藏和封装的编程原则。使用getset函数可保持类的私有类属性,但允许类用户访问这些属性,就像他们在访问类变量而不是调用类方法。

l  这种方法的好处是,可避免出现具有不实用名称的传统存取器函数,如getPropertyName()setPropertyName()

l  gettersetter的另一个好处是,使用它们可避免允许进行读写访问的每个属性有两个面向公共的函数。

使用gettersetter函数还可以覆盖从超类继承来的属性,这是使用常规类成员变量时不能做到的。在子类中不能覆盖使用var关键字声明的类成员变量。但是,使用gettersetter函数创建的属性没有此限制。可以对从超类继承的gettersetter函数使用override属性。

5.  方法重载

ActionScript 3.0中并不支持方法重载!

ActionScript 3.0中存在和C语言中printf函数一样的可变参数机制,可以使用参数机制实现类似重载的机制。但是我想说,先天不全做再多努力也不济。希望在后续版本中会增强实现函数重载。

6.  包、类及相关概念

l  包外:是相当于公共权限,这个层次的代码可以被任意的第三方访问。

l  包:是二级访问,包内的成员可以互相访问,但是包内的成员不能被包外访问

l  类:在类的内部成员可以互相访问,但是外部无法访问私有成员

l  包外类:只能被包中的类访问,它属于当前类的私有类。此包外类对外不可见。定义位置为package{ }外。可以定义一个或者多个class类。但类名不能与文件同名。

 

  • 走在网页游戏开发的路上(一)

  • 走在网页游戏开发的路上(二)

  • 走在网页游戏开发的路上(三)

接下来的文章我将介绍:

  • ActionScript3的事件机制

  • ActionScript3的动画原理

  • ActionScript3获取外部数据(加载XML、JS通信)

  • ActionScript3开发一个转盘抽奖程序

  • ActionScript3实现游戏中的计时器

  • ActionScript3中像素穿透(碰撞检测)

  • 。。。


相关文章
|
1月前
|
前端开发 JavaScript 开发工具
震惊!前端小白到大神的蜕变之路,这些技巧你竟然还不知道?
前端开发是互联网技术的重要组成部分,从新手到大神需要掌握HTML、CSS和JavaScript的基础知识,熟练使用框架和工具,如React、Vue和Git,并注重性能优化。持续学习和实践是成长的关键。本文分享了一些实用技巧,帮助你在前端开发之路上快速进步。
28 4
|
1月前
|
前端开发 JavaScript UED
不可思议!前端小白如何靠这些技巧逆袭,成为团队中的闪耀之星?
前端开发对初学者来说充满挑战,但通过正确的方法和技巧,你可以从新手蜕变为高手。本文分享前端小白逆袭的秘诀,包括夯实HTML、CSS与JavaScript基础,掌握前端框架与库,提升性能优化技巧,以及持续学习与分享。示例代码展示了简单的HTML+CSS+JavaScript页面和Vue组件,帮助你逐步进阶。
21 4
|
2月前
|
前端开发 API 开发者
🥇前端宝藏:多项目掌握技能的冒险之旅🏆
在前端开发的学习旅程中,实践是提升技能的关键。本文介绍了多个前端项目,包括计算器、天气应用、经典游戏等,涵盖了从React到Svelte的各种技术栈。每个项目都附有在线演示和源代码,旨在帮助读者深入理解实现细节,激励更多人参与实际项目开发。通过这些项目,读者可以将理论知识转化为实践,拓展职业机会。
21 0
|
JavaScript Java
【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来
【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来
184 0
|
Web App开发 前端开发 JavaScript
前端周刊第四期
前端周刊第四期
|
传感器
极客少年把爷爷的老打字机改造成酷炫乐器!疫情在家已经无聊成这样了?
极客少年把爷爷的老打字机改造成酷炫乐器!疫情在家已经无聊成这样了?
135 0
|
开发者 数据可视化 Java
6万人同时离场竟然一点都不挤?原来用了这个神器 | 开发者必读(085期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
732 0
|
UED
与艾体验的奇妙之旅
这是今年初写的一篇文章,但一直没有对外发。我们一直在等禅道的新版本改版完。6月26日,经过四个多月的开发,禅道10.0版本对外发布。肯定会有很多朋友好奇,为什么我们来决定做禅道 UX改版,是哪家设计团队帮我们做的方案呢?让我来揭晓答案吧。
1891 0