2009年1月26日 星期一

PV3D2.0 Snippets Panel for Flash

是否一直記不住PV3D類別的使用方法呢?
來安裝這個PV3D Snippets Panel
下載後解壓縮檔, 即是.mxp格式
點二下安裝該外掛,重新啟動FlashCS3或是CS4
在windows裡的other Panel即可找到該面版

有一系列的PV3D類別, 點一下你需要的, 再按下copy to clipboard
再到影格貼上就會有程式碼了, 真是方便呀
如果想要該面版的原始碼,可以到http://gotoandlearn.com下載
該作者有分享

2009年1月25日 星期日

AdobeCS4繁體中文式用版下載

在adobe的官網, 可以下載一系列的CS4試用版本
但就是找不到繁中版。

經由友站的介紹, 繁中版在英文的adobe站是找不到的


要把語系切到韓語www.adobe.com/kr找有繁中版。
這個還真的是!@#&U%(@#%。
看不懂韓語沒關係,
下載時的語言只要選擇最後一個就是繁中版的。

安裝好後, ya是的, 繁中版的DreamweaverCS4。
有圖有真相。

其他系列的軟體也是一樣的下載方式,就可以繁體中文版了。

2009.02.05更新, 感謝菜鳥梅子同學提供的資訊
在英文的官網, 下載試用版, 選擇韓語版, 不用懷疑。
安裝好了, 就會是繁體中文版了。
這個還真讓我無言。

2009年1月23日 星期五

Queasy Tools Panel v1.5.0


身為Flash的使用者, 這個組件奶小茶我100%推薦呀。
他是安裝在Flash CS3/CS4的組件面版外掛, 透過該面版的功能
可以幫你快速的完成一些煩人的步驟。

1.快速使用Easing的方式建立影格上的Tween動畫,。
2.圖層可視開關。
3.Library裡的JPG smooth功能開啟。
3.對齊場景左上角。
4.自動大小寫。
5.拷貝座標位置。
6.快速翻轉。
下載該.mxp, 使用Adobe Exchange Manager開啟即可
再重新啟動Flash CS3, 在windowls裡,選擇其他面版就可以找到。

2009年1月22日 星期四

Mockups For Desktop

一個很有趣的桌面拉Layout應用程式
http://www.balsamiq.com/products/mockups/desktop#download
使用Adobe AIR所開發的桌面應用程式,
有許多現成的小工具能直接托拉置放。
不知道對企劃大大們還有設計大大們在設計時會不會有幫助。
我覺得還滿有趣的軟體
線上youtube影片檔。
http://tw.youtube.com/watch?v=zLysy3IPfFI

2009年1月20日 星期二

新案上線_資生堂心機專館

美美的資生堂心機美人又來了
今年度換了心機代言人
依然是美麗閃閃呀。
這次的專案為了讓底圖能附合每位使用者的解悉度,
還不能被切到, 也不能變型, 所以寫了一個類別來專門除處這樣的需求。
http://mq.shiseido.com.tw/#/newsproduct200901/
點選網址後, 進入單元裡的四位Model主圖, 可以試著縮放Browser的大小
圖片都可以自動的縮放。




也分享奶小茶我所寫的程式碼:


SourceCodeDownload

2009年1月18日 星期日

BannerSlide效果

學生提到的問題
Demo效果:
http://www.uniqlo.com/jp/
上方的Banner輪播怎麼製作的呢?
1先製作數字的MovieClip元件, 做好RollOver動畫和RollOut動畫。
2使用Timer來當作自動播放器。

var numberContainer:Sprite = new Sprite();
//下方數字的容器。
numberContainer.y = 375;
this.addChild(numberContainer);

var itemOfNumber:int = 4;
//圖片數量。
var currentIndex:int = 0;
//目前播放的索引值。
var timer:Timer = new Timer(3000,0);
//Timer,用來自動播放下一張圖片。
timer.addEventListener(TimerEvent.TIMER,onTimer);
//偵聽事件。
timer.start();
//啟動Timer。

var ldr:Loader = new Loader();
this.addChildAt(ldr,0);
for (var i:int = 0; i itemOfNumber-1){
currentIndex = 0;
//因為有自動播放的功能, 避免圖片索引值一直越上加。
}
var _currentMC:MovieClip = numberContainer.getChildByName("item" + currentIndex) as MovieClip;
_currentMC.gotoAndPlay("over");
ldr.load(new URLRequest("images/" + currentIndex+".png"));

//讓現在的數字。
}


補充:2009_2_15, 增加XML版和圖片連結功能, 請重新下載
SourceCodeDownload

Flash 3D physics engine

等候已久的Flash 3D physics Engine出現啦
名稱為:jiglibflash
http://code.google.com/p/jiglibflash/
結合PV3D直接使用, 開心, 不需要再重學。
使用方法也很簡單
在建立PV3D物件後, 再建立對映的Physics物件
如:
new Cube之後
再建立一個JBox來對映
目前支援的碰撞物件有,球體、方塊、Plane。
也支援鏈結的效果。
奶小茶將官方的Demo改寫成自已的Demo。
Thumbnail - Click me

原始碼:

/*
Example Flash 3D Physics version 0.25 with timestep

Control by   : arrow keys and space bar

3D physics used  : jiglibflash (http://code.google.com/p/jiglibflash/) 
3D renderer used : Papervision 3D (http://code.google.com/p/papervision3d/)
Credits    : Muzer
Demo by    : milkmidi

*/

package
{ 
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
import flash.events.Event; 
import flash.events.MouseEvent;
import flash.utils.getTimer;


import jiglib.geometry.JBox;
import jiglib.geometry.JSphere;
import jiglib.math.JMatrix3D;
import jiglib.math.JNumber3D;
import jiglib.physics.PhysicsSystem;
import jiglib.physics.constraint.JConstraintPoint; 

import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.special.ParticleMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.objects.special.ParticleField;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.view.layer.ViewportLayer;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;
import org.papervision3d.view.stats.StatsView;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.view.BasicView;

[SWF(width = "950", height = "500", frameRate = "41", backgroundColor = "#000000", pageTitle = "milkmidi.com")]

public class MyDemo extends BasicView
{
// ------------------------------------------------------------------------
// DECLARE VARIABLES
// ------------------------------------------------------------------------

// Settings
private var amountBalls   : uint = 3; // default 3, amount of balls in the scene the first will be the one you can control with the arrows keys
private var amountBoxes   : uint = 3; // default 3, number of boxes in the scene 
private var amountSphereInChain : uint = 5; // default 5, number of sphere's in the chain
private var speedBall   : int = 50; // defailt 50, speed of the ball which you can control with the arrow keys
private var physicsSpeed  : Number = 5; // default 5, speed * deltatime

private var sceneLight   : PointLight3D;  
private var jBoxArray   : Array = new Array();  



// timer  
private var deltaTime:Number = 0;
private var currentTime:uint;
private var newTime:uint;
private var vplObjects:ViewportLayer;

// ------------------------------------------------------------------------
// MAIN CONSTRUCTOR
// ------------------------------------------------------------------------
public function MyDemo() {


super(0, 0, true, false);
init();
startRendering();
}

// ------------------------------------------------------------------------
// INIT
// ------------------------------------------------------------------------
private function init():void {   
init3DEngine();
initJiglib(); 
init3DObject();
init2DObject();   
createLotOfBox();
}

// ------------------------------------------------------------------------
// SETUP STAGE
// ------------------------------------------------------------------------
private function setupStage():void {
stage.align = StageAlign.TOP_LEFT;  
stage.scaleMode = StageScaleMode.NO_SCALE;   
stage.quality = StageQuality.MEDIUM;
stage.frameRate = 60;  
}


// ------------------------------------------------------------------------
// INIT PAPERVISION 3D 
// ------------------------------------------------------------------------
private function initJiglib():void {
//PhysicsSystem.getInstance().SetSolverType("FAST");
currentTime = getTimer(); // set time for physic loop
}

// ------------------------------------------------------------------------
// INIT PAPERVISION 3D 
// ------------------------------------------------------------------------
private function init3DEngine():void {   
viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT; // set viewport sortmode to index    

sceneLight = new PointLight3D(true, true);   
sceneLight.x = 0;
sceneLight.y = 400;
sceneLight.z = -300;

camera.x = 0;
camera.y = 450;
camera.z = -700;
camera.zoom = 10;
camera.focus = 100;  
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);  
}

private function init3DObject():void {
// SETUP GROUND   
var materia1Ground:MaterialsList = new MaterialsList();      
materia1Ground.addMaterial(new FlatShadeMaterial(sceneLight, 0x77ee77), "all");      
var pv3dGround:Cube = new Cube(materia1Ground, 600, 600, 50, 2, 2, 2)      
scene.addChild(pv3dGround);
// Viewport layer ground
var vplGround:ViewportLayer = viewport.getChildLayer(pv3dGround);   
vplGround.layerIndex = 1; // set index to 1
// Ground physics
var jGround:JBox = new JBox(pv3dGround, false, 600, 600, 50);    
PhysicsSystem.getInstance().AddBody(jGround);

// SETUP WALL
var materia1Wall:MaterialsList = new MaterialsList();
materia1Wall.addMaterial(new FlatShadeMaterial(sceneLight, 0x77ee77), "all");
var pv3dWall:Cube = new Cube(materia1Wall, 600, 50, 250);
scene.addChild(pv3dWall);
// viewport layer wall
var vplWall:ViewportLayer = viewport.getChildLayer(pv3dWall);
vplWall.layerIndex = 2; // set index to 1
// Ground physics
var jWall:JBox = new JBox(pv3dWall,false,600,50,250);
jWall.MoveTo(new JNumber3D(0,150,275), JMatrix3D.IDENTITY); // position wall north: y = wall.height/2 + wall.depth/2, z = ground.depth/2 + wall.depth/2  
PhysicsSystem.getInstance().AddBody(jWall);

vplObjects = new ViewportLayer(viewport,null);
vplObjects.layerIndex = 3;
vplObjects.sortMode = ViewportLayerSortMode.Z_SORT; // sort mode for this viewportlayer based on z
viewport.containerSprite.addLayer(vplObjects);
}
private function createLotOfBox():void {
if (jBoxArray.length > 0) {    
for (var i:int = 0; i < jBoxArray.length; i++) {
scene.removeChildByName("cube" + i);
PhysicsSystem.getInstance().RemoveBody(jBoxArray[i]);
}
}
jBoxArray = new Array();


var cube:Cube;
for (i = 0; i < 12; i++) {
var flatMat:FlatShadeMaterial = new FlatShadeMaterial(sceneLight, Math.random() * 0xffffff, 0xffffff);
var ml:MaterialsList = new MaterialsList( { all:flatMat } );
var _scale:Number = Math.random() * 50 + 10;
cube = new Cube(ml, _scale, _scale, _scale);
cube.name = "cube" + i;
vplObjects.addDisplayObject3D(cube);
scene.addChild(cube);

var _jBox:JBox =  new JBox(cube, true, _scale, _scale, _scale);     

var _targetX:Number = Math.random() * 400 - 200;
var _targetY:Number = Math.random() * 500 + 50;
var _targetZ:Number = Math.random() * 400 - 200;
var _position:JNumber3D = new JNumber3D(_targetX, _targetY, _targetZ);
_jBox.MoveTo(_position, JMatrix3D.rotationX(Math.random() * 360 * 180 / Math.PI)); // start position
_jBox.setMass(_scale);

jBoxArray.push(_jBox);
PhysicsSystem.getInstance().AddBody(_jBox);
}   
}


private function init2DObject():void {

var stats:StatsView = new StatsView(renderer);
addChild(stats);   
stage.addEventListener(MouseEvent.CLICK, onStageClick);

}

private function onStageClick(e:MouseEvent = null):void {
createLotOfBox();
} private function onEnterFrame(e:Event ):void {
physicsStep(); 
camera.x = Math.sin(newTime / 1000) * 200;
singleRender();
}


private function physicsStep():void {
newTime = getTimer();
deltaTime = ((newTime - currentTime) / 1000) * physicsSpeed;
currentTime = newTime;
PhysicsSystem.getInstance().Integrate(deltaTime); // phyisc step 5 is the speed
}
}
}

2009年1月14日 星期三

2009_Portfolio

感謝1/11當天所有到場的朋友
一起來參於分享會,
因為時間的關係, 所以並沒有把全部的作品Demo完。
完整的Demo可以點擊這兒欣賞。

http://portfolio.milkmidi.com/
待有空時, 我再把相關的原始碼整理好讓大家下載學習。
Copwer和D.CAT的分享也是很精彩。
期待下次的分享會。

Flash_加入我的最愛

在製作網站, 想要讓使用者快速的加入我的最愛
在Flash裡要怎麼製作呢?
加入我的最愛的作法, 一定需要使用JavaScript來製作
Flash本身沒辦法, 也不需要有此功能。
透過Flash去呼叫JavaScript來執行加入我的最愛函式即可。
程式碼:

方法1:將整個呼叫JavaScript的函式直接寫在Flash裡
這樣Html裡就不需要加寫JS的函式。


方法二:
在html裡寫上JS的函式:

Flash端使用
ExternalInterface.call("addFavorite")
呼叫該JS的函式即可。

2009年1月7日 星期三

PV3D2.0 Camera類型切換

PV3D2.0之後的版本
把TargetCamera和FreeCamera整合在一起了
也就是只有一個Camera3D類別
那怎麼切換呢?
var camera:Camera3D = new Camera3D();
camera物件有個target屬性, 指的就是camera的鏡頭要看著誰。
當設定成camera.target = new DisplayObject();
鏡頭就會看著新建立的3D物件座標,就會一直看著0,0,0座標。
就是TargetCamera。
要切換成FreeCamera的話, 就把target屬性設成null即加。
Thumbnail - Click me

程式碼:
package{ 
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.getTimer;
import milkmidi.papervision3d.Trident3D;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
//匯入MovieClip類別。
import flash.events.Event;
//匯入事件類別。
import org.papervision3d.view.BasicView;
//匯入BasicView類別。
public class ToggleCameraType extends Sprite { 
//A01_BasicDocument類別, 繼承MovieClip。  
private var view:BasicView;  
//宣告view變數為BasicView物件。  
private var isTargetCamera:Boolean = true;
private var btn:TestButton;
public function ToggleCameraType():void{
//建構函式, 該類別被實體化時, 會執行一次。
//可以把要初始化的值或物件寫在這。 
init3DEngine();
//執行initPV3DEngine函式。
init3DObject();
//執行initPV3DObject函式。
initObject();
}
private function init3DEngine():void{
//此函式的用意,是用來建立PV3D所需的基本物件類別。
//在此建構BasicView物件、設定Camera參數。
view = new BasicView(0, 0, true, true, "Target");  
view.camera.y = 300;
//建構BasicView物件   
//參數值(
//viewport寬度, viewport高度, 是否自動對齊場景中間
//, 是否開啟滑鼠感應功能,camera類別) 
//viewport寬度和viewport高度設定為0的話,
//表示寬高是跟著整個場景的大小。   
//PV3D的Camera有二種類型:
//Target:目標Camera,不論鏡頭怎麼移動,永遠看著目標點。
//Free :自由Camera,可以任意的移動和旋轉鏡頭。
this.addChild(view);   
//BasicView是繼承Sprite物件,可被加入至顯示物件容器裡。   
this.addEventListener(Event.ENTER_FRAME, onEventRender3D); 
//偵聽ENTER_FRAME事件。
}
private function init3DObject():void{
//init3DObject函式, 用來建立PV3D物件、材質及偵聽事件。
var colorMat:ColorMaterial = new ColorMaterial(0x223344);
for (var i:int = 0; i < 5; i++) {
var plane:Plane = new Plane(colorMat, 200, 200);
plane.x = (i - 2) * 250;
view.scene.addChild(plane);
}

view.scene.addChild( new Trident3D(1300, true, false));
//筆者所撰寫的Trident3D。
//讓PV3D出現3D的座標系。
//new Trident3D(線段長度:uint, 是否出現座標字母:Boolean, 是否出現交叉平面:Boolean);
}
private function initObject():void {
btn = new TestButton("Toggle");
btn.addEventListener(MouseEvent.CLICK, onBtnClick);
this.addChild(btn);
}

private function onBtnClick(e:MouseEvent):void {
isTargetCamera = !isTargetCamera;
if (isTargetCamera) {
view.camera.target = new DisplayObject3D();
//透過camera物件的target屬性。    
btn.label = "Current CameraType:Target";
}else {
view.camera.target = null;
btn.label = "Current CameraType:Free";
}

trace("isTargetCamera:" + isTargetCamera);
}
private function onEventRender3D(e:Event):void {   
view.camera.x = Math.sin(getTimer() / 1000) * 500;
//讓camera來回移動。
//範圍是-500到500。   
view.singleRender();
//運算view物件。
//使用算圖類別,運算Camera所看到的Scene3D世界
//並將結果呈顯在view裡。
}
}
}

////建立一個鈕按。
import flash.display.Sprite
import flash.text.TextField;
internal class TestButton extends Sprite {
private var _txt:TextField;
public function TestButton(p_label:String) {
_txt = new TextField();
_txt.text = p_label;
_txt.width = 200;
this.addChild(_txt);
this.buttonMode = true;
this.mouseChildren = false;
this.graphics.beginFill(0xffddee);
this.graphics.drawRect(0, 0, 150, 20);
this.graphics.endFill();  
}
public function set label(p_label:String):void {
_txt.text = p_label;
}
}
SourceCodeDownload

2009年1月6日 星期二

Flash10 Pendant

Thumbnail - Click me

之前是使用PV3D來製作, 這次就直接用Flash10內建的3D來使用即可。
原理是一模一樣的, 其實我偷偷包了二層。
一層管rotationX,一層管rotationZ, 就可以有這樣的效果了。
原始碼


PV3D 控製DAE




這個是之前PV3D官網所提供的Focus DAE模型,
我將其原始碼改成PV3D2.0的程式。
由Flash來控製模型的移動和轉旋。
使用鍵盤的上、下、左、右可以移動車子。
DAE是繼承DisplayObject3D, 所以也有x,y,z等屬性。
DAE裡面可以包含了許多的子系3D物件, 名稱的話, 就是在3D建模時取的名稱,
到了PV3D時會一樣。
所以可以使用getChildByName來取得子系物件
但較麻煩的是DAE包了很多層
以這個Focus.DAE來看
他的架構是:
DAE ---- COLLADA_Scene ------Focus ------ Steer_FR
也就是車身是在第三層
而輪子是在第四層

SourceCodeDown
請用FlashCS4 , 或是Flex, FlashDevelop發怖
FlashCS3不支援Embed Tag
不然就自已改寫一下吧

2009年1月5日 星期一

PV3D2.0基本教學三_材質與物件

PV3D裡的可視物件建置, 都是一個物件, 貼上一個材質, 再被加入至Scene3D物件裡,
然後運算出來。
接下來我們試著建立一個Plane物件, 並貼上色彩材質ColorMaterial。
Plane類別是繼承DisplayObject3D, 所以擁有x,y,z等屬性。
new Plane(材質:MaterialObject3D, 寬:Number, 高:Number,
水平切面數:Number, 垂直切面數:Number);
參數1:材質,只要是任何繼承MaterialObject3D的物件,都可以被當作材質來使用。
參數2:Plane物件的寬度。
參數3:Plane物件的高度。
參數4:水平切面數。
參數5:垂直切面數。
切面數會影響到圖片的品質,切面越高,圖片能呈現的效果越好, 但相對的就需要更多的運算。

ColorMaterial類別。
色材材質, 只能是單一的顏色。
new ColorMaterial(色碼:uint,透明度:Number);
參數1:色碼。
參數2:透明度, 由0完成透明到1不透明。



package {
import flash.display.MovieClip;
import flash.events.Event;  
import org.papervision3d.view.BasicView;
import org.papervision3d.materials.ColorMaterial;
//匯入材質包裡的色彩材質。
import org.papervision3d.objects.primitives.Plane
//匯入基本物件包裡的Plane物件。
public class A02_primitives_Plane extends MovieClip {  
private var view  :BasicView;   
private var plane  :Plane;
//宣告plane變數, 型別為Plane。
public function A02_primitives_Plane():void {
init3DEngine();   
initPV3DObject();
}
private function init3DEngine():void{   
view = new BasicView(0, 0, true, true, "Target");         
this.addChild(view);      
this.addEventListener(Event.ENTER_FRAME, onEventRender3D);    
}
private function initPV3DObject():void {   
var colorMat:ColorMaterial = new ColorMaterial(0xA7C520, 1);   
//建立色彩材質 new ColorMaterial(色碼:uint , 透明度:Number)。
colorMat.doubleSided = true;
//開啟材質的雙面模式, 預設為false。
//如果沒開啟該模式, 當物件背對鏡頭時, 就會看不見。
plane = new Plane(colorMat, 300, 300);
//建立plane物件 new Plane(材質:Material ,寬:Number ,高:Number)
view.scene.addChild(plane);   
//view.scene加入將plane物件。
}
private function onEventRender3D(e:Event):void {
plane.rotationY += 3;
//plane物件, rotationY每次加3。
//以上程式可以寫成plane.rotationY = plane.rotationY +3;   
view.singleRender();   
}
}
}

PV3D2.0基本教學一
PV3D2.0基本教學二

PV3D2.0基本教學二

設定PV3D類別檔, 可以參考奶老師的第一篇教學
PV3D2.0基本教學一
PV3D世界是由幾個基本的物件組合而成, 如果你有3D動畫的製作經驗, 應該很好理解,
如果沒有也沒關係, 後面的許多範例會一一介紹到。
Viewport3D:
視圖窗口, 簡單來說可以想像是Flash裡畫布的大小, 也可以理解成算圖的尺寸。
Scene3D:整個3D的場景, 之後建立的3D物件都是被加入至其中。
Camera3D:PV3D的鏡頭, Camera3D是用來拍攝Scene3D的畫面。
BasicRenderEngine:算圖類別, 把所有的數據值結果運算成圖像。
像想一下你座在一台電視機前, 電視機的螢幕尺吋就是Viewport3D的大小
電視台的攝影棚就是Scene3D, 攝影機就是Camera3D, 當電視機收到訊號,
透過訊號轉換將數據運算成圖像, 這個工作就像是BasicRenderEngine類別。
流程即是BasicRenderEngine 運算Camera3D所看到的Scene3D世界,
並將畫面呈現在Viewport3D。
一次要記住四個類別對第一次使用PV3D的使用者可能會有些害怕。
新版本的PV3D 提供了一個整合的視圖類別BasicView。

該類別是繼承Sprite, 所以可以被加入至可視物件容器裡。
BasicView類別已包含了Scene3D,Camera3D,Renderer,Viewport四種物件,
不需要再另外建構。
因為PV3D畫面需要不斷的被更新, 透過Event.ENTER_FRAME事件不斷運算,即可一直更新畫面。
建立PV3D世界的步驟。
1.建立一個類別檔當作文件檔當別使用, 該類別必需是繼承MovieClip或是Sprite。
public class 類別名稱 extends MovieClip
2.匯入PV3D所需的類別。
import org.papervision3d.view.BasicView;
要一次匯入該類別包下的所有類別, 可以使用星號來代示。
import org.papervision3d.view.*;
3.宣告PV3D所需的相關變數
private var view:BasicView;
view變數, 型別為BasicView。
4.建立init3DEngine 函式, 用來初始化BasicView物件, 同時偵聽Event.ENTER_FRAME事件。
private function init3DEngine():void{
view = new BasicView(0, 0, true, true, "Target")
//建構BasicView物件。
this.addChild(view);
//將view物件加入至目前的可視物件容器裡。
this.addEventListener(Event.ENTER_FRAME, onEventRender3D); ;
//偵聽Event.ENTER_FRAME事件。
}
5.偵聽者函式onEventRender3D, 用來運算場景畫面。
private function onEventRender3D(e:Event){
view.singleRender();
//執行view物件的singleRender函式。
}
6.建立init3DObject函式, 用來建立其他PV3D物件。
private function init3DObject ():void{
//在這建立其他的PV3D物件
}
7.在建構函式執行init3DEngine,init3DObject函式。
發怖後即可看到輸出訊息。
INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)
INFO: Viewport autoScaleToStage : Papervision has changed the Stage scale mode.
完整程式碼:
package{ 
import flash.display.MovieClip;
//匯入MovieClip類別。
import flash.events.Event;
//匯入事件類別。
import org.papervision3d.view.BasicView;
//匯入BasicView類別。
public class A01_BasicDocument extends MovieClip { 
//A01_BasicDocument類別, 繼承MovieClip。  
private var view:BasicView;  
//宣告view變數為BasicView物件。  
public function A01_BasicDocument():void{
//建構函式, 該類別被實體化時, 會執行一次。
//可以把要初始化的值或物件寫在這。 
init3DEngine(); //執行initPV3DEngine函式。
init3DObject(); //執行initPV3DObject函式。
}
private function init3DEngine():void{
//此函式的用意,是用來建立PV3D所需的基本物件類別。
//在此建構BasicView物件、設定Camera參數。
view = new BasicView(0, 0, true, true, "Target");     
//建構BasicView物件   
//參數值(
//viewport寬度, viewport高度, 是否自動對齊場景中間
//, 是否開啟滑鼠感應功能,camera類別) 
//viewport寬度和viewport高度設定為0的話,
//表示寬高是跟著整個場景的大小。   
//PV3D的Camera有二種類型:
//Target:目標Camera,不論鏡頭怎麼移動,永遠看著目標點。
//Free :自由Camera,可以任意的移動和旋轉鏡頭。
this.addChild(view);   
//BasicView是繼承Sprite物件,可被加入至顯示物件容器裡。   
this.addEventListener(Event.ENTER_FRAME, onEventRender3D);    
//偵聽ENTER_FRAME事件。
}
private function init3DObject():void{
//init3DObject函式, 用來建立PV3D物件、材質及偵聽事件。
}
private function onEventRender3D(e:Event):void {   
view.singleRender();
//運算view物件。
//使用算圖類別,運算Camera所看到的Scene3D世界
//並將結果呈顯在view裡。
}
}
}

[創意講堂3] 札根 專業 迎向2009

專業人才會不斷磨練本身技能,致死方休,他們追求知識的好奇心永遠不會滿足~ 大前研一
年輕,是札根的時刻,現在的你準備好了嗎~ 張忠謀
2009/1/11 週日 下午, 將有五位精彩的構師分享工作上的專業經驗。
活動網址:http://funwish.net/?p=104

本次創意講堂內容規劃如下(實際內容將依講師群作調整):

2009/1/11 週日 下午

時間 主題 講師
13:30 開放進場
14:00
~ 14:50
Papervision 3D & Flash CS4
奶綠
泡茶吃點心
15:00
~ 15:50
Creation & Creative Web Design
Cowper Wang
聊天哈拉
16:00
~ 16:50
Adobe Flash Catalyst (Thermo)
Jeremy
聊天哈拉
17:00
~ 17:50
Coltrane (Wordpress 2.7)
&
Applications of the Social Network
陳嵩文 / 劉凱新
討論交流