Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-3.打造基类
来源:互联网 发布:买淘宝号多少钱 编辑:程序博客网 时间:2024/05/16 18:21
原文:http://www.bcia-bag.com/article/ZMTExMjA=.html
*申明:教程中用到的3D引擎Alternativa均以非盈利教学为目的,不得用于任何商业用途。如要购买正版请访问官网网站:http://alternativaplatform.com/en/
我这里已经临晨4点了,不过还是急着写教程。因为平时要上班,所以只能周末更新教程,我希望每次能多写几篇给大家,所以只有熬夜了。
那我们就秉烛夜谈吧。
这一章,将正式把理论用于实际,带大家走入A3D,对于没有看前面教程的同学,我强烈建议你能把之前的教程认真看一遍,因为这一章的知识与之前密切相关,而且绝对会帮你进一步理解A3D的机理的。
上一章讲到,A3D有几个很重要的构成部分,场景(Scene3D),摄像机(Camera3D)与视窗(View)。所以在每一A3D的显示应用中都必须用到这三个对象,并每次都要设置这三个对象的属性。例如,上一章讲到的,必须要向场景中添加摄像机等操作。每次这样的重写代码往往很麻烦,所以我们将为A3D的显示应用创建一个基类,实际的文档类都将继承于这个基类,这样就不必重写代码,同时也体现了AS3语言的封装性与继承派生性。
一. 建立库文件夹
首先建立一个文件夹,用于存放这个类文件将来我们还会创建许多基于A3D的自定义类文件,创建自己的A3D应用库,也就是现在要建立的文件夹。我们取名为lib。
二.建立基类文件
在这个文件夹下,建立一个AS3脚本文件,这是一个以.as结尾的脚本文件,可以用Flash生成:
以Flash CS4为例,选择:文件-->新建-->ActionScript文件,并保存在lib文件夹下。文件命名为“AltBasse.as”
三. 编写程序
程序源码如下:
package lib //打包地址要和文件夹地址一样
{
//1.导入要用到的类文件
//1.1 导入要用到的A3D类文件
import alternativa.engine3d.controllers.CameraController; //摄像机控制器
import alternativa.engine3d.core.Camera3D; //摄像机对象类
import alternativa.engine3d.core.Object3D; //三维
import alternativa.engine3d.core.Scene3D; //场景
import alternativa.engine3d.display.View; //视窗
//1.2 导入要用到的Flash类文件
import flash.display.Sprite;
import flash.events.Event;
//建立一个继承自Sprite类的子类,名字要和当前文件名一样
public class AltBasse extends Sprite
{
//建立四个保护类型的属性(因为我们只希望其子类访问这些属性,所以设置成保护类型)
protected var scene:Scene3D; //场景
protected var view:View; //视窗
protected var camera:Camera3D; //摄像机
protected var cameraController:CameraController; //摄像机控制器
//构造函数
public function AltBasse()
{
super(); //调用父类的构造函数,即Sprite类的构造函数。
// 建立场景实例
this.scene = new Scene3D();
this.scene.root = new Object3D(); //为场景的root属性,即真正意义上的场景,定义成三维显示对象(不明白请参见基础教程第二章)
//建立摄像机
this.camera = new Camera3D();
//将摄像机加入场景中(为什么?请参见基础教程第二章)
this.scene.root.addChild(camera);
//建立视窗
this.view = new View();
//将视窗加入到当前影片剪辑中(为什么不在场景中?请参见基础教程第二章)
addChild(this.view);
//绑定照相机要观察的视窗,也就是说,可以有多个视窗与多个摄像机,但是要制定每个摄像机拍摄那个视窗中的影像,所以要绑定摄像机与对应的视窗。这两者是多对多的关系,简单的应用中,我们用一对一的就可以了。
this.view.camera = this.camera;
//建立摄像机控制器
this.cameraController = new CameraController(stage);制定控制器在哪个舞台中
//定义控制器控制那台摄像机
this.cameraController.camera = this.camera;
this.cameraController.setDefaultBindings(); //将控制器的按键设为默认值。由于A3D自带的摄像机控制器是以鼠标和键盘来控制摄像机的,这就要制定鼠标怎样的按键控制摄像机怎样的运动,键盘按什么键,控制什么运动。这条语句就是将这些按键与对应的控制操作设为默认的绑定关系。
//是否控制摄像机可以检测碰撞,防止摄像机和其他三维对象碰撞
this.cameraController.checkCollisions = true;
this.cameraController.collisionRadius = 20; //设置检测碰撞的检测角
//下面这条约语句话其实可以不要,写到这里是为了告诉大家摄像机控制器要想启动,就必须设置ControlsEnabed属性为true,默认情况下是false,我们这里就设置成默认值。
this.cameraController.controlsEnabled = false;
//为舞台注册一个事件监听器,用来监听播放器窗口大小发生变化的事件。
stage.addEventListener(Event.RESIZE,OnResize);
this.OnResize(null); //调用一次发播放器窗口大小发生变化的事件响化的函数OnResize,这样可以省去对视窗大小的设置。因为在OnResize函数中有这些设置。
}
//播放器窗口大小变化的事件响应函数
protected function OnResize(e:Event):void //设置成保护类型而不是私有类型,是因为希望在其在派生类中可以重写该响应函数。
{
view.width = stage.stageWidth; //每当窗口变化时,都把视窗设置成与播放器大小一样大。
view.height = stage.stageHeight;
scene.calculate(); //每次变化时,同时对场景中的三维对象进行渲染。就相当于刷新一下场景中的三维对象,因为在改变是视窗是,显示的三维对象可视化属性都会改变。
}
}
}
*源文件可以在附件中下载
到这里,我们就建立好了一个A3D文档类的基类。以后,我们要建立任何一个A3D的文档类,都可以继承这个基类,并且派生出自己的属性。
可以看到,这个基类的构造用到了许多上一章的知识,所以希望大家能认真的看过前面的章节。现在也许大家还看不到什么可视化的结果。不过在下一章,也就是基础教程的最后一章中,我们会用这个基类建立一些有趣的三维模型。
说着说着,天都亮了,巴黎的六月还是有点凉。
我们下次再见。
本文由 站酷网 - baileyange 原创,转载请保留此信息,多谢合作。
- Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-3.打造基类
- Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-1.C'est quoi ? Alternativa
- Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-2.Alternativa机理
- Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-4.Bonjour Alt
- Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-5.本章小结与练习
- Dragon-Studio 之 Flash Alternativa 3D引擎 进阶教程-1.内置模型
- Dragon-Studio 之 Flash Alternativa 3D引擎 进阶教程-2.表面材质(1)
- Dragon-Studio 之 Flash Alternativa 3D引擎 专题讲座-1. 玩转摄像机
- Alternativa 3D 7 免费
- Adobe Flex + Adobe Air 3 + Alternativa 3D = 桌面3D引擎
- 引擎基础教程 3D游戏引擎FAQ
- 业界资讯:Alternativa 3D 7 免费
- Blaze 3D Studio基础教程之制作流程详解
- Flash 3d引擎分享
- Flash 3D引擎全集
- Flash 3D引擎对比
- Flash 3D引擎收集
- Flash 3D引擎全集
- Windows下,用eclipse CDT 搭建 C++开发环境
- OLE拖放-drag-drop-4
- JSP初学之己见(HTML+Java)
- OLE拖放-drag-drop-5
- OLE拖放-drag-drop-6
- Dragon-Studio 之 Flash Alternativa 3D引擎 基础教程-3.打造基类
- camera学习(一)--参数设置
- 为什么要用CPAN
- Struts2概述
- 解决camera的两个小问题
- 彻底隐藏ACCESS文件所有的基本表包括链接表及系统表函数
- 代码审查
- centos5.4_64与Broadcom BCM5709不兼容问题
- 第三十六讲:Android手机摄像头编程入门