PV3D目前沒有雙面的Plane物件
之前就是用Cube, 然後把深度設成0
現在有熱情的網友寫出DoublePlane物件
其實也是修改Cube物件來得, 這樣就決解了二面的問題
另一個問題點是
PV3D的Plane並沒有width和height的屬性
有時想用Tween來讓他變寬變高, 只能改scale屬性,不方便
所以奶小茶我就寫了一個簡單的類別去extends DoublePlane
讓他有width和height屬性。

之前就是用Cube, 然後把深度設成0
現在有熱情的網友寫出DoublePlane物件
其實也是修改Cube物件來得, 這樣就決解了二面的問題
另一個問題點是
PV3D的Plane並沒有width和height的屬性
有時想用Tween來讓他變寬變高, 只能改scale屬性,不方便
所以奶小茶我就寫了一個簡單的類別去extends DoublePlane
讓他有width和height屬性。

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import gs.TweenMax
import gs.easing.*;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.utils.BitmapMaterialTools;
import org.papervision3d.view.BasicView;
[SWF(width = "950", height = "500", frameRate = "41", backgroundColor = "#cccccc", pageTitle = "milkmidi.com")]
public class Plane2Demo extends BasicView
{
[Embed(source='Paper01.png')]
private var Texture:Class;
[Embed(source='Paper02.png')]
private var TextureBack:Class;
private var _obj:MilkDoublePlane;
private static const WIDTH:int = 350;
private static const HEIGHT:int = 200;
public function Plane2Demo(){
super(0, 0, true, true, CameraType.TARGET);
viewport.buttonMode = true;
init3DObjects();
startRendering();
}
private function init3DObjects():void {
var _bitFrontMat:BitmapMaterial = BitmapMaterialTools.createBitmapMaterial(Texture);
_bitFrontMat.interactive = true;
_bitFrontMat.precise = true;
var _bitBackMat:BitmapMaterial = BitmapMaterialTools.createBitmapMaterial(TextureBack);
_bitBackMat.interactive = true;
_bitBackMat.precise = true;
_obj = new MilkDoublePlane( _bitFrontMat , _bitBackMat, WIDTH, HEIGHT);
//這時候就會有width和height的屬性可以使用。
trace(_obj.width , _obj.height);
_obj.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK , clickHandler);
scene.addChild(_obj);
}
private function clickHandler(e:InteractiveScene3DEvent):void {
//click button, tween obj width and height.
//剛好圖片的大小是和場景寬、高一樣,
//並使用screenZ公式,讓物件100%呈現。
TweenMax.to( _obj , 1,
{
z :screenZ,
rotationY :180,
width :stage.stageWidth,
height :stage.stageHeight,
ease :Cubic.easeInOut,
yoyo :true,
onComplete :tweenComplete
} );
}
private function tweenComplete():void {
trace(_obj.width, _obj.height);
}
public function get screenZ():Number {
return camera.focus * camera.zoom - Math.abs(camera.z);
}
}
}
SourceCodeDownload
留言
雖然辛苦但是值得阿~~
他們這紙飛機做的蠻不錯的~~
不論技術或是創意的點都很讚