forked from: forked from: flash on 2010-12-23
forked from forked from: flash on 2010-12-23 (diff: 77)
カメラ
ActionScript3 source code
/**
* Copyright takashi08 ( http://wonderfl.net/user/takashi08 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/GIxj
*/
// forked from takashi08's forked from: flash on 2010-12-23
// forked from takashi08's flash on 2010-12-23
package {
import flash.display.*;
import flash.events.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.*;
import org.libspark.betweenas3.easing.*;
import org.libspark.betweenas3.events.*;
//カメラ
public class PV3D extends Sprite{
private var camera:Camera3D;
private var scene:Scene3D;
private var viewport :Viewport3D;
private var renderer :BasicRenderEngine;
//camera orbit
private var isDragging:Boolean;
private var mouseDownX:Number;
private var mouseDownY:Number;
private var cameraPitch:Number;
private var cameraYaw:Number;
private var roringX:IObjectTween;
private var roringY:IObjectTween;
private var delayTween:ITween;
private var totalTween:ITween;
private var cube:Cube;
private var cube2:Cube;
private var cubeAry:Array = new Array();
public function PV3D():void{
//カメラ
camera = new Camera3D();
camera.x = 0;
camera.y = 0;
camera.z = -3500;
//シーン/ビューボート/レンダラーを作成
scene = new Scene3D();
viewport = new Viewport3D( stage.stageWidth, stage.stageHeight, false, true );
renderer = new BasicRenderEngine();
addChild(viewport);
//お好みでライトも()
var light:PointLight3D = new PointLight3D(false);
light.x = 0;
light.y = 0;
light.z = -1000;
//フラットシェードマテリアル:HIKISUU light,lightColor,ambientColor,specularLevel
var material :FlatShadeMaterial = new FlatShadeMaterial(light, 0xD7261C );
material.interactive = true;
var materials :MaterialsList = new MaterialsList( { all : material } );
for(var i:int = 0;i < 30;i++){
cube = new Cube( materials );
cubeAry[i] = cube;
if(i < 5){
cubeAry[i].x = i * 750;
cubeAry[i].y = 0;
}else if(i < 10){
cubeAry[i].x = (i * 750)-3725;
cubeAry[i].y = 750;
}else if(i < 15){
cubeAry[i].x = (i * 750)-7500;
cubeAry[i].y = -750;
}else if(i < 20){
cubeAry[i].x = (i * 750)-7500-3725;;
cubeAry[i].y = 1500;
}else if(i < 25){
cubeAry[i].x = (i * 750)-15000;
cubeAry[i].y = -1500;
}
cubeAry[i].x = cubeAry[i].x -1500;
cubeAry[i].z = 0;
scene.addChild(cubeAry[i]);
}
//2こめのキューブ
//マウスイベントはInteractiveScene3DEventをつかう
//cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,cubeClickHandler);
//シーンにcubeをaddChild
addEventListener( Event.ENTER_FRAME, onEnterFrame );
//camera orbit
stage.addEventListener(MouseEvent.MOUSE_DOWN,onDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,onUpHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMoveHandler);
roringYAnime();
}
private function roringYAnime():void{
for(var k:int = 0;k < 30;k++){
roringY = BetweenAS3.tween(cubeAry[k],{rotationX:cube.rotationX + 90},null,1);
roringY.play();
}
roringY.addEventListener(TweenEvent.COMPLETE,tweenComplete);
}
private function onDownHandler(event:MouseEvent):void{
//camera.target = cube2;//カメラの対象を変更
var blurtween:ITween;
//blurtween = BetweenAS3.tween(cube, { _blurFilter:{blurX:30, blurY:30}, alpha:0.0 }, null, 1.0);
//blurtween = BetweenAS3.tween(cube, { x:1000}, null, 1.0);
//blurtween.play();
//カメラをbetweenでうごかす
var cameraTween:ITween;
cameraTween = BetweenAS3.tween(camera,{x:event.target.x,y:event.target.y ,z:event.target.z - 1000},null,2,Bounce.easeOut);
cameraTween.play();
}
private function onUpHandler(event:MouseEvent):void{
//camera.target = cube;//カメラの対象を変更
}
private function onMoveHandler(event:MouseEvent):void{
}
public function onEnterFrame(e:Event): void {
renderer.renderScene( scene, camera, viewport );
}
public function tweenComplete(event:TweenEvent):void{
for(var j:int = 0;j < 30;j++){
roringX = BetweenAS3.tween(cubeAry[j],{rotationY:cube.rotationY + 90},null,1);
roringX.play();
}
roringX.addEventListener(TweenEvent.COMPLETE,roringYComelete);
}
public function roringYComelete(event:TweenEvent):void{
roringYAnime();
}
}
}
