PV3D-2.构建你的第一个应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
构建你的第一个应用本章,我们将开始着手写第一行代码.那些刚进入oop的程序者可以从本章的oop简单介绍开始.如果已经很熟悉oop,可以跳过此段继续学习Papervision3D里的3D场景.明了后,我们可以开始写第一个基本工程!部分工程将被封装成默认的类,以后我们都会用到这些类.
本章包含以下内容:
●面向类及对象编程介绍
●熟悉文档类/主程序文件
●Papervision3D的3D组织的基础
●构建你第一个工程
●为书中的实例做准备
面向类及对象编程介绍
本书中,我们将着重使用Papervision3D类库.我们将写出用于Flash,FlexBuilder,Flash Builder 中的类.若你是FlashIDE的开发者,这可能是你第一次写自己的类.面向对象的编程是本书的重要部分,本书给出了一些简短的介绍.若你已经很熟悉Flex,flash的oop编程,你可以直接阅读本章中的Papervision3D里的3D基本场景.
若你是面向对象的新手也不必太担心—本书仅用到了面向对象的基础.学习使用PaperVision3D进行面向对象编程可以让你对类更熟悉并且可能提高你对面向对象编程的兴趣.
什么是类?实际上,他们只是一些的函数(方法)和变量(属性)组织在一个单独文件中,这被称为类的定义.一个类是创建新对象的设计.
听起来有些模糊?其实你一直都在使用类.从FlashAPI里创建的每个Object都基于类.如Sprite,MovieClip,及TextField这些对象可能你都用过.实际上这些都是类.这些对象的设计及他们的类都在Flash中.首先看一下我们使用FlashAPI创建Sprite对象:
var mySprite:Sprite = new Sprite();
很熟悉?通过这些,你创建了一个叫mySprite的Sprite类的对象.这叫做一个类的实例.内置的类与自定义的类没什么不同.Papervision3D是一个自定义类的集合.第一章说过如何来实例化一个Papervision3D里的DisplayObject3D类,
var myObject3D:DisplayObject3D = new DisplayObject3D();
一旦知道了如何使用类,就可以创建自己类了.
创建自定义类
ActionScript类是存放于计算机上以.as结尾的文本文件,包括ActionScript脚本代码.这些代码就是前面所说的对象的设计.现在看看设计是什么样子:
package {
public class ExampleClass
{
public var myName:String = "Paul";
public function ExampleClass()
{
}
public function returnMyName():String
{
return "My name is" + myName;
}
}
}
第一行,是包(package)语句,紧随其后的是左大括号({)和类下面的右大括号(}).包是组织类的一种方式,代表了存放类文件的目录.假设你创建了一个名为myPackage的目录并将FLA或源码文件存放在其中.为了访问此目录及里面的类,需要用目录名来定义包,如下:
package myPackage {
...
}
子目录的工作情况也一样.现在假设在myPackage目录下有一个名为subPackage的子目录.应该这样来定义子目录subPackage:
package myPackage.subPackage {
...
}
如果你没有创建一个目录来组织你的类,可以使用默认包来代替相应的包名,(即不写包名)本书的所有例子都使用默认包.实际上,为了避免命名冲突,必须用包来组织众多的类.
包定义之后,将看到类的定义,看起来如:
public class ExampleClass
{
...
}
类的名字必须和类文件的名字一致.本例中,类文件必须存为ExampleClass.as.
实际上,包是一种很好的类文件组织方式,可以让项目中每个类都有唯一
的名字.避免命名冲突.
在class的前面有一个public,这是一个关键字用来表明项目中所有代码都可以访问此类.这个关键字被称为访问控制符.
类的名字将被用来实例化类.像这样来实例化类:
var classExample:ExampleClass = new ExampleClass();
在类里定义的变量称其为类属性.类属性的数量不限.每个类属性均有访问控制符.本例中的访问控制符是public,表示所有的类都可以对其进行读写:
var classExample:ExampleClass = new ExampleClass();
classExample.myName = "Jeff";
这样便创建了一个类ExampleClass的实例.我们可以将属性myName由Paul改为Jeff.当一个属性声明为public,便可以这样操作.如果你想让属性只能在类中使用,需要将属性改为private: private var myName:String = "Paul";
这时执行之前的代码,会得到一个编译时错误.
接着我们看到类中名为ExampleClass的方法.
方法名与类名相同的方法被称为构造器(构造方法).
public function ExampleClass()
{
}
构造器的访问控制符均是public并且每当实例化类时就被自动调用.这表示构造器中的代码将被自动执行.
类中其他的所有函数(function)都称为方法(method).
public function returnMyName():String
{
return "My name is" + myName;
}
方法定义完后,你将发现一个冒号紧跟着一个数据类型.这是定义方法返回值的数据类型.你也可以在Flash 的时间轴上这样定义方法,但这不是必须的.returnMyName()方法定义了返回值是字符串.如果你不想返回任何值,可以使用void作为返回类型:
public function returnNothing():void
{
//Do not return something
}
我们只需为普通方法定义返回类型即可,构造器无返回值
类,及其属性和方法,都用访问控制符,用来确定对象的访问权限.到现在我们已经看到了关键字public,表示在任何地方都可以访问.当使用public时,必须注意到可能会造成类的混乱.可以用private关键字来避免这样情况,private将使属性或方法只能在本类内进行访问.其余两个常用的访问控制符是internal和protected.internal表示同一包内可以访问.protected表示属性或方法只能由子类访问.子类是oop继承的一部分,我们稍微将解释下.
只要属性或方法不准备在类外进行访问,最好将其设定为private.每当定义属性或方法时,你都应该确定下是否要在类外进行访问.
继承
有时想创建一个类,而此类和已存在的类又很相似,而你只是想添加一个新的方法.你可以拷贝已有的类,粘贴到新类中,再添加一个新的方法.然而这样做的效率很低.这时就有继承的用武之地了.
继承是一种扩展已有类(称为父类或基类)的技术,从父类中继承的类称为子类.子类可以访问父类中所有非