package { import alternativa.engine3d.materials.DevMaterial; import alternativa.engine3d.primitives.Box; import alternativa.types.Point3D; import jp.clockmaker.alternativa3d.BasicTemplate; [SWF(width = 720, height = 480, frameRate = 60)] /** * @author Yasu (clockmaker.jp) */ public class Cubes extends BasicTemplate { [Embed(source = 'alternativa3d_big.png')] private const LOGO_IMAGE:Class; /** * 初期化されたときに実行されるイベントです。 * 初期化時に実行したい処理をオーバーライドして記述します。 */ override protected function atInit():void { for (var i:int = 0; i < 50; i++) { var len:Number = 200 * Math.random() + 100; var box:Box = new Box(len, len, len); box.cloneMaterialToAllSurfaces(new DevMaterial()); scene.root.addChild(box); box.x = 2000 * (Math.random() - 0.5); box.y = 2000 * (Math.random() - 0.5); box.z = 2000 * (Math.random() - 0.5); box.rotationX = Math.PI * 2 * Math.random(); box.rotationY = Math.PI * 2 * Math.random(); box.rotationZ = Math.PI * 2 * Math.random(); } addChild(new LOGO_IMAGE); } /** * Event.ENTER_FRAME 時に実行されるレンダリングのイベントです。 * レンダリング前に実行したい処理をオーバーライドして記述します。 */ override protected function atPreRender():void { camera.x += (2000 * Math.sin(mouseX / stage.stageWidth * 2 * Math.PI) - camera.x) * 0.1; camera.y += (2000 * Math.cos(mouseX / stage.stageWidth * 2 * Math.PI) - camera.y) * 0.1; camera.z += (2000 * (mouseY / stage.stageHeight -0.5) - camera.z) * 0.1; cameraContoller.lookAt(new Point3D()); } } }