準備知識
ü 類
ü 繼承
ü 重寫(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的認識可以分為四個階段,最後乙個階段是在...