2008年12月02日
Papervision3Dをいじってみたり
ActionScript勉強の一環としてPapervision3Dをいじってみました。 白いのを突っつくと跳ねます。
FlashPlayer9以上が必要です。
ソースコードは↓に
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.media.Camera; import org.papervision3d.cameras.Camera3D; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; public class Main extends Sprite { // キューブの設定 private const WIDTH:Number = 100; private const HEIGHT:Number = 100; private const DEPTH:Number = 100; private const SPACE:Number = 20; private const CUBE_NUM:uint = 1; // 物理定数 private const GRAVITY:Number = -9.8; private const E:Number = 0.5; // 3D設定 private var scene:Scene3D; private var viewport:Viewport3D; private var camera:Camera3D; private var render:BasicRenderEngine; public function Main() { scene = new Scene3D(); viewport = new Viewport3D(400, 300); camera = new Camera3D(); render = new BasicRenderEngine(); addChild(viewport); var material:ColorMaterial = new ColorMaterial(0xFFFFFF); var materialsList:MaterialsList = new MaterialsList({all:material}); for(var i:uint = 0; i < CUBE_NUM; i++) { var cube:DisplayObject3D = new Cube(materialsList, WIDTH, HEIGHT, DEPTH); cube.x = i * WIDTH + SPACE; cube.extra = new Object(); cube.extra.vy = 0; scene.addChild(cube, 'cube' + i); } camera.x = 500; camera.y = 500; camera.lookAt(getCube(Math.floor(CUBE_NUM / 2))); addEventListener(Event.ENTER_FRAME, renderCube); addEventListener(MouseEvent.CLICK, bound); } /** * レンダリング * @param evt */ private function renderCube(evt:Event):void { render.renderScene(scene, camera, viewport); } /** * キューブをクリックすると飛び跳ねる * @param evt */ private function bound(evt:MouseEvent):void { for(var i:uint = 0; i < CUBE_NUM; i++) { var cube:DisplayObject3D = getCube(i) cube.extra.vy = 60; } stage.addEventListener(Event.ENTER_FRAME, fall); } /** * 落ちる動作 * @param evt */ private function fall(evt:Event):void { for(var i:uint = 0; i < CUBE_NUM; i++) { var cube:DisplayObject3D = getCube(i) cube.y += cube.extra.vy; cube.extra.vy += GRAVITY; if(cube.y < 0) { cube.y = 0; cube.extra.vy *= -E; stage.removeEventListener(Event.ENTER_FRAME, fall); } } } /** * 指定したIDのキューブを返す * @param id * @return cube:DisplayObject3D */ private function getCube(id:uint):DisplayObject3D { return scene.getChildByName('cube' + id); } } }
例によって「FLASH OOP for ActionScript 3.0 (翔泳社)」を参考に。 ソースの理解よりもライブラリの読み込み方に苦労しました。
全然3Dっぽくないけどそこは練習ということで。
GoogleReaderを3ペイン表示にするスクリプトのα版
クリック動作を無効にするジョークブックマークレット
文字サイズを拡大縮小するスクリプト
ダブルクリックでスクロールするスクリプト
電卓を表示するブックマークレット
ごくごく一部の顔文字を絵文字に置き換えるスクリプト
クリック動作を無効にするジョークブックマークレット
文字サイズを拡大縮小するスクリプト
ダブルクリックでスクロールするスクリプト
電卓を表示するブックマークレット
ごくごく一部の顔文字を絵文字に置き換えるスクリプト
Posted by Handle at 00:08│Comments(0)│プログラミング
コメントフォーム