加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

6 BasicView到底是什么东东

发布时间:2020-12-15 06:24:06 所属栏目:百科 来源:网络整理
导读:BasicView到底是什么东东? 准备知识 ü????????类 ü????????继承 ü????????重写(override) 在PV3D中有四大核心类,要在Flash中显示3D物体,就要使用这四个类。也就是说你要在每个项目中重复的定义这四个类。嗯,有人觉得没什么,多敲几行代码罢了。有人

BasicView到底是什么东东?

准备知识

ü????????类

ü????????继承

ü????????重写(override)

在PV3D中有四大核心类,要在Flash中显示3D物体,就要使用这四个类。也就是说你要在每个项目中重复的定义这四个类。嗯,有人觉得没什么,多敲几行代码罢了。有人觉得这简直不能容忍。我是属于后面这种的。

有什么办法结束这种重复的定义工作呢?有的,那就是BasicView。下面我们来看看BasicView的类图,具体实现代码可参看PV3D源代码。


在类图中,我们仅仅将我们感兴趣的属性和方法标出。从图可知,BasicView是一个Sprite,而且从AbstractView类中继承了四大核心类。那么startRendering方法和onRenderTick方法是什么呢?

为了理解BasicView类,我们决定自己编写一个简单MyBasicView类,它继承Sprite类,拥有四个核心类变量,以及startRendering方法和onRenderTick方法。这样我们就能基本了解BasicView类的执行原理。

在src文件夹中创建MyBasicView类,代码见代码清单1。

代码清单1

package?

{

?????? import flash.display.Sprite;

?????? import org.papervision3d.cameras.Camera3D;

?????? import org.papervision3d.render.BasicRenderEngine;

?????? import org.papervision3d.scenes.Scene3D;

?????? import org.papervision3d.view.Viewport3D;

??????

?????? import flash.events.Event;

?????? /**

?????? ?* ...

?????? ?* @author yl

?????? ?*/

?????? public class MyBasicView extends Sprite

?????? {

????????????? //定义四大核心类

????????????? protected var scene:Scene3D;

????????????? protected var viewport:Viewport3D;

????????????? protected var camera:Camera3D;

????????????? protected var render:BasicRenderEngine;

?????????????

????????????? public function MyBasicView()

????????????? {

???????????????????? //构造方法中初始化四大核心类

???????????????????? scene= new Scene3D();

???????????????????? viewport= new Viewport3D();

???????????????????? camera= new Camera3D();

???????????????????? render= new BasicRenderEngine();

???????????????????? //将窗口加载进MyBasicView对象

???????????????????? addChild(viewport);

????????????? }

?????????????

????????????? public function startRendering():void {

???????????????????? //添加刷屏方法onRenderTick

???????????????????? addEventListener(Event.ENTER_FRAME,onRenderTick);

????????????? }

?????????????

????????????? protected function onRenderTick(event:Event):void {

???????????????????? //不断的将场景渲染到窗口

???????????????????? render.renderScene(scene,camera,viewport);

????????????? }

?????? }

}

现在,我们修改Main类,代码如代码清单2所示。

代码清单2

package

{

?????? import flash.display.Sprite;

?????? import flash.events.Event;

?????? import org.papervision3d.cameras.Camera3D;

?????? import org.papervision3d.materials.WireframeMaterial;

?????? import org.papervision3d.objects.primitives.Sphere;

?????? import org.papervision3d.render.BasicRenderEngine;

?????? import org.papervision3d.scenes.Scene3D;

?????? import org.papervision3d.view.Viewport3D;

??????

?????? importflash.display.StageAlign;

?????? importflash.display.StageScaleMode;

?????? /**

?????? ?* ...

?????? ?* @author yl

?????? ?*/

?????? [SWF(width="640",height="480",backgroundColor="#FFFFFF")]

?????? public class Main extends MyBasicView

?????? {

????????????? private var sphere:Sphere//定义一个球体

?

????????????? public function Main():void

????????????? {

???????????????????? if(stage) init();

???????????????????? else addEventListener(Event.ADDED_TO_STAGE,init);

????????????? }

?????????????

????????????? private function init(e:Event = null):void

????????????? {

???????????????????? removeEventListener(Event.ADDED_TO_STAGE,init);

???????????????????? //entry point

???????????????????? stage.scaleMode= StageScaleMode.NO_SCALE;

???????????????????? stage.align= StageAlign.TOP_LEFT;

????????????????????

???????????????????? sphere= new Sphere(null,320,12,8);

???????????????????? sphere.z= -100;

???????????????????? //将生成的球体加载进场景,以便摄像机能拍摄到

???????????????????? scene.addChild(sphere);//这里使用了继承来的变量

???????????????????? startRendering();//使用继承来的方法

????????????? }

????????????? override protected function onRenderTick(event:Event):void {//由于继承来的方法不适合我们要求,我们重写方法

???????????????????? super.onRenderTick(event);//调用MyBasicView类中的onRenderTick方法

???????????????????? sphere.rotationY+= 3;

????????????? }

?????? }

}

测试运行,出来球体旋转效果。但是和直接在Main类中定义四大核心类相比,代码减少了很多,最重要的是MyBasicView类可以在所有的项目中使用。这样,我们达到了代码重用的效果。

理解了MyBasicView类,那么就很容易理解BasicView类。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读