package { import flash.display.*; import flash.events.*; import flash.utils.*; // Papervision3D 2.0 alpha(08.08.08)を利用 import org.papervision3d.core.effects.view.ReflectionView; import org.papervision3d.cameras.*; import org.papervision3d.materials.*; import org.papervision3d.objects.*; import org.papervision3d.objects.primitives.* [SWF(width = "720", height = "480", frameRate = "60", backgroundColor = "#001122")] /** * メインクラス(ReflectionViewを継承することで反射面が表現できます) */ public class Main extends ReflectionView { /** * Constructor */ public function Main() { stage.quality = StageQuality.LOW; // オブジェクトを作成します var butterfly:DisplayObject3D = createButterfly(); var earth:Plane = new Plane(new WireframeMaterial(0xFFFFFF, .5), 1000, 1000, 10, 10); // オブジェクトの角度を調整します butterfly.rotationX = 90; earth.rotationX = 90; // 3D表示リストに追加します scene.addChild(butterfly); scene.addChild(earth); // 反射面の高さを設定します surfaceHeight = 0; // 毎フレームの演出を設定します(匿名関数で楽して書いてます) addEventListener(Event.ENTER_FRAME, function(event:Event):void { // 蝶の揺らぎを設定しています butterfly.y = Math.sin(getTimer() / 200) * -25 + 240; // カメラが演習を回っているように設定しています camera.x = 500 * Math.sin(getTimer() / 1000); camera.y = 600; camera.z = 500 * Math.cos(getTimer() / 1000); // カメラが近づいたり離れたりする演出 camera.zoom = 10 * Math.sin(getTimer() / 2000) + 40; // ReflectionViewのレンダリング singleRender(); }); } /** * 蝶を作成します * @return 蝶(DisplayObject3D型) */ private function createButterfly():DisplayObject3D { // 蝶のコンテナーを作成 var butterfly :DisplayObject3D = new DisplayObject3D(); // 蝶の羽を作成 var leftWing :DisplayObject3D = new DisplayObject3D(); var rightWing :DisplayObject3D = new DisplayObject3D(); // 蝶の羽の素材を作成(PNGファイルを読み込み) var mat:BitmapFileMaterial = new BitmapFileMaterial("butterfly_wind.png"); mat.doubleSided = true; // 蝶の羽を貼り付ける平面を作成 var leftWingPlane :Plane = new Plane(mat, 200, 200, 1, 1); var rightWingPlane :Plane = new Plane(mat, 200, 200, 1, 1); // 蝶の羽平面の座標や角度を調整 leftWingPlane.scaleX = -1; leftWingPlane.x = -100; rightWingPlane.x = 100; // 蝶の羽をコンテナーの表示リストに追加 leftWing.addChild(leftWingPlane); rightWing.addChild(rightWingPlane); butterfly.addChild(leftWing); butterfly.addChild(rightWing); // アニメーションの設定 addEventListener(Event.ENTER_FRAME, function(event:Event):void { // 羽が羽ばたく演出 leftWing.rotationY = Math.sin(getTimer() / 200) * 60; rightWing.rotationY = Math.sin(getTimer() / 200) * -60; }); // 蝶のインスタンスを返却 return butterfly; } } }