http://www.flashsandy.org/
from_ greenass hansune
As 3.0
3D engine :: sandy
작업에 쓰인 건데 살짝 정리안한 코드 . 세상엔 착하고 대단한 넘들이 많다.
import flash.events.*;
import flash.ui.*;
import sandy.core.Scene3D;
import sandy.core.data.*;
import sandy.core.scenegraph.*;
import sandy.materials.*;
import sandy.materials.attributes.*;
import sandy.primitive.*;
import sandy.util.*;
import sandy.events.*;
private var scene:Scene3D;
private var camera:Camera3D;
private var queue:LoaderQueue;
private var g:Group;
private var tgRad:Array = new Array();
private var rad:Array = new Array();
public function navi3D():void {
queue = new LoaderQueue();
queue.add( "p0", new URLRequest("data/poster_0.jpg") );
queue.add( "p1", new URLRequest("data/poster_1.jpg") );
queue.add( "p2", new URLRequest("data/poster_2.jpg") );
queue.add( "p3", new URLRequest("data/poster_3.jpg") );
queue.add( "p4", new URLRequest("data/poster_4.jpg") );
queue.add( "p5", new URLRequest("data/poster_5.jpg") );
queue.add( "p6", new URLRequest("data/poster_6.jpg") );
queue.add( "p7", new URLRequest("data/poster_7.jpg") );
queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete );
queue.start();
}
public function loadComplete(event:QueueEvent):void {
// We create the camera
camera = new Camera3D( 1360, 768 );
camera.x = 0;
camera.y = 0;
camera.z = 0;
camera.near = 140;
// We create the "group" that is the tree of all the visible objects
var root3D:Group = createScene();
// We create a Scene and we add the camera and the objects tree
scene = new Scene3D( "scene", mStage, camera, root3D );
scene.rectClipping = false;
camera.moveForward(-1310);
// Listen to the heart beat and render the scene :: 프레임 렌더링
this.addEventListener( Event.ENTER_FRAME, enterFrameHandler );
// 키 이벤트
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
// 이미지 모션
mStage.addEventListener(Event.ENTER_FRAME,posterMove);
//카메라 핸들
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMovedHandler);
}
// Create the scene graph based on the root Group of the scene
private function createScene():Group {
// Create the root Group
g = new Group();
// let's create the Sprite 2D object
for (var i:Number=0; i<listNum; i++) {
var bit:Bitmap = new Bitmap(queue.data["p"+i].bitmapData);
var s:Sprite2D = new Sprite2D("poster"+i,bit,1);
s.x = 0;
s.z = 0;
s.y = 0;
//s.scaleX = 0;
tgRad[i] = rotateSpan*i-90;
rad[i] = 90;
g.addChild(s);
}
return g;
}
private function posterMove(e:Event):void {
for (var i:int = 0; i < listNum; ++i) {
rad[i] += (tgRad[i] - rad[i])*0.02;
var s:Sprite2D = Sprite2D(g.getChildByName("poster"+i));
s.x = Math.cos(rad[i]*Math.PI/180)*400;
s.z = Math.sin(rad[i]*Math.PI/180)*400;
var n:int;
n = i - 2;
if(n<0){n=n+listNum;}
if (tgRad[i]%360 == 0) {
focusedMovie = i;
posterBox(nStage.getChildAt(n)).alpha += (1 - posterBox(nStage.getChildAt(n)).alpha)*0.02;
} else {
posterBox(nStage.getChildAt(n)).alpha += (0 - posterBox(nStage.getChildAt(n)).alpha)*0.06;
}
}
}
// The Event.ENTER_FRAME event handler tells the Scene3D to render
private function enterFrameHandler( event : Event ):void {
/* 자식들 위치 조정
for (var j:Number=0; j<listNum; j++)
{
if(g.children[j].z<camera.z-120 )
{
g.children[j].z+=1200;
}
}*/
scene.render();
}
// This function handles the move foreward or backward simultaion
private function keyPressedHandler(event:KeyboardEvent):void {
switch (event.keyCode) {
case Keyboard.UP :
camera.moveForward(5);
break;
case Keyboard.DOWN :
camera.moveForward(-5);
break;
}
}
// This function handles the direction of the similation movement
private function mouseMovedHandler(event:MouseEvent):void {
camera.pan=(event.stageX-300/2)/10;
}
////////////////////////
this.addEventListener(Event.ENTER_FRAME,btView);
private function btView(e:Event):void {
ok.alpha += 0.02;
ijun.alpha += 0.02;
daum.alpha += 0.02;
ok.y += (okPoint.y - ok.y)*0.02;
ijun.x += (ijunPoint.x - ijun.x)*0.02;
daum.x += (daumPoint.x - daum.x)*0.02;
if (ok.alpha > 0.8) {
this.removeEventListener(Event.ENTER_FRAME,btView);
ok.y = okPoint.y;
ijun.x = ijunPoint.x;
daum.x = daumPoint.x;
ok.alpha = 0.5;
ijun.alpha = 0.5;
daum.alpha = 0.5;
addEvent();//버튼 액션
}
}
private function addEvent():void {
ok.addEventListener(Event.ENTER_FRAME,okClick);
ijun.addEventListener(Event.ENTER_FRAME,ijunClick);
daum.addEventListener(Event.ENTER_FRAME,daumClick);
}
private function removeEvent():void {
ok.removeEventListener(Event.ENTER_FRAME,okClick);
ijun.removeEventListener(Event.ENTER_FRAME,ijunClick);
daum.removeEventListener(Event.ENTER_FRAME,daumClick);
}
private function okClick(e:Event):void {
if (ok.hitTestPoint(mouseX,mouseY,false)) {
ok.alpha = 1.0;
if (focusedMovie == 2) {
removeEvent();
trace("영화정보 보기");
mStage.removeEventListener(Event.ENTER_FRAME,posterMove);
scene.dispose();//중요//씬 메모리 지우기
this.play();
}
} else {
ok.alpha += (0.5 - ok.alpha)*0.05;
}
}
private function daumClick(e:Event):void {
if (daum.hitTestPoint(mouseX,mouseY,false)) {
daum.alpha = 1.0;
removeEvent();
for (var i:int = 0; i<listNum; ++i) {
tgRad[i] += rotateSpan;
}
var revitalBt:Number = setTimeout(addEvent,1000);
} else {
daum.alpha += (0.5 - daum.alpha)*0.05;
}
}
private function ijunClick(e:Event):void {
if (ijun.hitTestPoint(mouseX,mouseY,false)) {
ijun.alpha = 1.0;
removeEvent();
for (var i:int = 0; i<listNum; ++i) {
tgRad[i] -= rotateSpan;
}
var revitalBt:Number = setTimeout(addEvent,1000);
} else {
ijun.alpha += (0.5 - ijun.alpha)*0.05;
}
}





