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

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访问控制。如果没有指定访问控制,编译器默认将构造函数设为public。private、protected、internal及其它所有自定义的命名空间都不能用于构造函数。

现在问题来了,在java,c#等语言中一般使用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.  get和set存取器方法

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

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

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

使用getter和setter函数还可以覆盖从超类继承来的属性,这是使用常规类成员变量时不能做到的。在子类中不能覆盖使用var关键字声明的类成员变量。但是,使用getter和setter函数创建的属性没有此限制。可以对从超类继承的getter和setter函数使用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中像素穿透(碰撞检测)
  • 。。。
时间: 2025-01-02 13:14:23

走在网页游戏开发的路上(四)的相关文章

大家快来玩转盘抽奖游戏(走在网页游戏开发的路上(七))

.  抽奖流程 其实我们的Flash只是一个显示作用,要转到哪个位置(中哪个奖品)是后台来完成的.而且每个奖品的概率是不同的,不是等概率的,我想没有转盘抽奖游戏是等概率的.从玩家点击"抽奖"开始到结束,与后台的交互如下: 转盘抽奖的大致流程是这样的: F  玩家点击Flash中的"抽奖"按钮: F  Flash调用web页面中的Javascript函数,告诉它玩家开始抽奖了.当然Flash调用JS的时候是带了参数的,比如是谁在抽奖等详细信息: web页面中的Java

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

游戏中的背景音乐和声效 0.  前言 不管是大型客户端游戏还是轻量级的网页游戏,游戏中背景音乐和声效是必不可少的.好的背景音乐.声效会给游戏增色,本文不从策划/设计等角度去考虑,只从程序实现上面讲在网页游戏开发中如何去实现背景音乐.声效.背景音乐和声效有以下几个要求: ü  背景音乐与声效是分开的,可以独立设置开关 ü  背景音乐一般循环播放一直存在 ü  声效点击才触发,这种声音任何时候只播放一个,如果两个瞬间点击多个按钮,只播放最后一个声音 为了使背景音乐和声效分开,可以使用不同的声道来播放

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

起步 --此系列谨记录我步入页游开发队伍的历程. 0.写在前面 相信有很多和我一样的人,曾多次问google.问baidu.问各大论坛--如何开发游戏?开发游戏如何入门?由于游戏开发本身其复杂.庞大.涉及东西比较多,始终不得其道,最终激情无情的被时间这把杀猪刀给磨灭.之后又一次激情澎湃,又一次不了了之-- 本人喜欢玩游戏,也有幸在研究生毕业能够加入腾讯QQ游戏开发部门,本系列将记录如何步入网页游戏开发的历程.此系列,至少是目前阶段,主要关注如何使用ActionScript 3.0开发网页游戏(本

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

游戏中定时器的设计 0.  前言 在游戏开发中计时器/定时器是必须的,而且会在多处用到,如吃药补血每秒回10点且持续1分钟.玩家从一点到达另一点的过程需要多少时间.下面是定时器在七雄争霸中的几个应用场景,直接上图: 场景1:建筑升级时间 场景2:建筑升级时间 场景3:科技研究时间 类似的场景还有很多,就不一一列举了.但有一点可以肯定的就是,不可能每个地方都去new一个定时器各自管理,这样会消耗大量CPU和内存,从而导致游戏不流畅,画面卡卡的.所有一般游戏中都只维护一个全局的定时器,这也是本文的主

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

游戏中的图像资源 当今游戏早已不再是黑白机的时代,游戏都由色彩丰富.精致的图像,流畅的动画构成.Flash游戏也不例外,Flash既支持矢量图又支持位图,他们各有优缺点.本文的目的即是介绍何时使用矢量图,何时使用位图,如何在两者之间权衡? 1.    前言 首先让我们了解一下何谓矢量图,何谓位图,及各自的优缺点.这些内容与游戏无直接关系,但是了解他们的差异有助于我们在游戏中如何选择. 1.1 矢量图 矢量图(摘自:百度百科)使用直线和曲线来描述图形,这些图形的元素是一些点.线.矩形.多边形.圆和

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

AS3之函数 0.  前言 函数:完成某个目标任务的代码块,它是代码重用的最小单位. 函数是可在ActionScript中调用的基本代码单位.ActionScript中用户定义的函数和内置函数都由Function对象来表示,该对象是Function类的实例. 类的方法与Function对象略有不同.与普通函数对象不同,方法和与其关联的类对象紧密关联.因此,方法或属性具有在同一类的所有实例中共享的定义.可以从实例提取方法并将其处理为"绑定"方法(保留与原始实例的链接).对于绑定方法,th

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

AS基础过关 0.  ActionScript简介 ActionScript是Macromedia(现已被Adobe收购)为其Flash产品开发的,最初是一种简单的脚本语言,现在最新版本3.0,是一种完全的面向对象的编程语言,功能强大,类库丰富,语法类似JavaScript,多用于Flash互动性.娱乐性.实用性开发,网页制作和RIA应用程序开发. ActionScript是一种基于ECMAScript的脚本语言,可用于编写Adobe Flash动画和应用程序.由于ActionScript和Ja

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

AS3事件模型 --AS3的灵魂之一 0.  前言 ActionScript 3.0事件模型使用方便,而且符合标准,它与Adobe Flash Player显示列表(display list)完美集成在一起.ActionScript 3.0的事件模型是基于DOM 3的事件规范[1],是业界标准的事件处理体系结构,为ActionScript 3.0程序员提供了强大而直观的事件处理工具. 为了清晰理解AS3事件模型,我们必须首先知道什么是事件模型?事件模型组成?DOM3事件模型? 1.  事件模型及

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

Flash动画原理 --动画是将静止的画面变为动态的艺术.实现由静止到动态,主要是靠人眼的视觉残留效应.利用人的这种视觉生理特性可制作出具有高度想象力和表现力的动画影片. 0.  前言 像所有的动画显示一样,Flash的动画原理也是通过不断的刷新屏幕,利用每次屏幕上显示对象位置的不同.大小色彩的变化等产生动画效果.动画编程的关键是一定要有变化,而且该变化需要在一定时间内来完成(以达到欺骗人眼,使分解的画面连续起来,达到运动的效果).Flash中使用帧频来控制每秒钟刷新屏幕的次数,通过使用的帧频的