6 BasicView到底是什麼東東

2021-06-03 22:26:18 字數 3171 閱讀 8027

準備知識

ü        類

ü        繼承

ü        重寫(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.*****vision3d.cameras.camera3d;

import org.*****vision3d.render.basicrenderengine;

import org.*****vision3d.scenes.scene3d;

import org.*****vision3d.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.*****vision3d.cameras.camera3d;

import org.*****vision3d.materials.wireframematerial;

import org.*****vision3d.objects.primitives.sphere;

import org.*****vision3d.render.basicrenderengine;

import org.*****vision3d.scenes.scene3d;

import org.*****vision3d.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類。

敏捷到底是什麼?

文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...

我們到底是什麼?

我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...

SDN到底是什麼

sdn到底是什麼?雖然這個概念已經被炒到了,但還沒有人對其給出乙個明確的概念。盛科網路總監張衛峰撰寫了自己關注sdn以來,對其認識的四個階段,最後乙個階段又回到了sdn字面的意思軟體定義網路,每個階段作者的新觀點,也會給我們帶來一些啟發。以下為原文 我對sdn的認識可以分為四個階段,最後乙個階段是在...