Papervision3DとTweenerで地図を斜めに置いて回転させる
http://web.sfc.keio.ac.jp/~shokai/archive/as3/0804_Pv3d/Pv3dTest/Pv3dTest.html
http://web.sfc.keio.ac.jp/~shokai/archive/as3/0804_Pv3d/Pv3dTest/
キーボードの数字0〜7キーで回転する
package { import flash.display.*; import flash.events.*; import flash.net.*; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.scenes.*; import org.papervision3d.cameras.*; import org.papervision3d.objects.*; import org.papervision3d.materials.*; import caurina.transitions.Tweener; /** * 地図を斜めに配置して、視点を回す * @author Sho Hashimoto */ public class Pv3dTest extends Sprite { var pv3stage:Sprite; var scene:Scene3D; var camera:Camera3D; var planeMap:DisplayObject3D; var sky:Loader; var mapMask:Loader; public function Pv3dTest() { stage.scaleMode = StageScaleMode.EXACT_FIT; // 伸縮する // stage.scaleMode = StageScaleMode.NO_SCALE; // 伸縮しない stage.align = StageAlign.TOP_LEFT; // 左上から sky = new Loader(); sky.load(new URLRequest("sky.png")); addChild(sky); pv3stage = new Sprite(); addChild(pv3stage); mapMask = new Loader(); mapMask.load(new URLRequest("mask.png")); addChild(mapMask); pv3stage.x = 400; pv3stage.y = 400; scene = new Scene3D(pv3stage); var map:BitmapFileMaterial = new BitmapFileMaterial("map.png"); planeMap = new Plane(map, 20000, 20000, 8, 8 ); planeMap.z = 1000; scene.addChild(planeMap); camera = new Camera3D(); camera.x = 0; camera.y = -100; camera.z = -250; scene.renderCamera(camera); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress); addEventListener(Event.ENTER_FRAME, onEnterFrame); } function onKeyPress(event:KeyboardEvent):void { trace(event.keyCode); var direction:int = (event.keyCode - 48) * 45; if (0 <= direction && direction <= 360) { if (direction - planeMap.rotationZ > 180) direction -= 360; // 距離が短い方向に回転 else if (planeMap.rotationZ - direction > 180) direction += 360; Tweener.addTween(planeMap, { rotationZ:direction, time:1, transition:"liner" } ); } } function onEnterFrame(e:Event):void { scene.renderCamera(camera); } } }