📄 body.as
字号:
package
{
import flash.net.LocalConnection;
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import flash.utils.Timer;
import flash.events.TimerEvent;
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.*;
import caurina.transitions.*;
public class Body extends Sprite
{
private var scene:Scene3D;
private var camera:Camera3D;
private var tg:TransformGroup;
private var shadingAt:PhongAttributes;
//create the body
private var body = new FemaleBody();
private var breast = new Breasts();
var rotationControl:Number;
var init:Boolean = false;
//local conection
var incoming:LocalConnection = new LocalConnection();
var outgoing:LocalConnection = new LocalConnection();
public function methodToControl(param:Number):void {
if(param ==0) repostion();
if(param >=10) controlLt(param);
if(param == 1) zoomIn();
if(param == 2) zoomOut();
if(param == 4) rotationControl = 4;
if(param == 5) rotationControl = 5;
if(param == 6) viewPoint(6);
if(param == 7) viewPoint(7);
if(param == 8) viewPoint(8);
if(param == 9) viewPoint(9);
}
public function Body()
{
// We create the camera
incoming.connect("control");
incoming.client = this;
camera = new Camera3D( 1000, 1000,7);
camera.x = 0;
camera.y =0;
camera.z = -600;
camera.lookAt(0,0,0);
var root:Group = createScene();
scene = new Scene3D( "scene", this, camera, root );
addEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
// Create the scene graph based on the root Group of the scene
private function createScene():Group
{
// Create the root Group
var g:Group = new Group();
tg = new TransformGroup('BodyGroup');
//material, texturing, skin ,color , appearance
//advanced light attributes
shadingAt = new PhongAttributes (true, 0.2, 15);
shadingAt.ambient = 0.3;
shadingAt.diffuse = 0.8;
shadingAt.specular = 0.6;
shadingAt.gloss = 10;
var materialAttr:MaterialAttributes = new MaterialAttributes(shadingAt);
var material:Material = new ColorMaterial( 0x66FFFF, 0.3, materialAttr);
material.lightingEnable = true;
var app:Appearance = new Appearance( material);
var material1:Material = new ColorMaterial( 0xFF0000, 1, materialAttr);
material1.lightingEnable = true;
var app1:Appearance = new Appearance( material1);
body.appearance = app;
breast.appearance = app;
breast.container.buttonMode = true;
breast.container.addEventListener(MouseEvent.MOUSE_OVER,function(){
breast.appearance = app1;
});
breast.container.addEventListener(MouseEvent.MOUSE_OUT,function(){
breast.appearance = app;
});
breast.container.addEventListener(MouseEvent.CLICK,function(){
outgoing.send("Hightlight", "React");
});
tg.addChild(body);
tg.addChild(breast);
tg.x = -8;
tg.y=14;
g.addChild(tg);
return g;
}
//UI Event Handler
private function zoomIn():void {
incoming.close();
rotationControl = 5;
repostion();
Tweener.addTween(camera, {z:-58, time:2, transition:"linear"});
Tweener.addTween(tg, {x:-0.5, time:2, transition:"linear"});
Tweener.addTween(tg, {y:-9, time:2, transition:"linear"});
var ticker:Timer = new Timer(1000,3);
ticker.addEventListener(TimerEvent.TIMER_COMPLETE,timeSend);
ticker.start();
}
private function zoomOut():void {
Tweener.addTween(camera, {z:-600, time:2, transition:"linear"});
Tweener.addTween(tg, {x:-8, time:2, transition:"linear"});
Tweener.addTween(tg, {y:18, time:2, transition:"linear"});
}
private function viewPoint(vp:Number):void{
rotationControl = 5;
repostion();
switch(vp){
case 6:
tg.rotateY = -90;
break;
case 7:
tg.rotateY = 90;
break;
case 8:
tg.rotateX = -90;
break;
case 9:
tg.rotateX = 90;
break;
}
}
private function repostion():void {
Tweener.removeAllTweens();
tg.rotateY = 0;
tg.rotateX = 0;
camera.z = -600;
camera.fov = 7;
tg.x = -8;
tg.y = 14;
body.container.alpha = 1;
shadingAt.ambient = 0.3;
shadingAt.diffuse = 0.8;
shadingAt.specular = 0.6;
shadingAt.gloss = 10;
}
private function controlLt(pa:Number):void{
if(pa>=10 && pa<=20) shadingAt.ambient = (pa-10)/10;
if(pa>=21 && pa<=31) shadingAt.specular = (pa - 21)/10;
if(pa>=32 && pa<=42) shadingAt.diffuse = (pa - 32)/10;
if(pa>=43) shadingAt.gloss = pa-43;
}
private function timeSend(evt:TimerEvent):void{
tg.destroy();
}
private function keyPressed(event:KeyboardEvent):void {
switch(event.keyCode) {
case Keyboard.UP:
tg.rotateY +=10;
break;
case Keyboard.DOWN:
tg.rotateY -=10;
break;
case Keyboard.RIGHT:
tg.x +=1;
break;
case Keyboard.LEFT:
tg.x -=1;
break;
case Keyboard.PAGE_DOWN:
tg.z -=30;
break;
case Keyboard.PAGE_UP:
tg.z +=30;
break;
}
}
// The Event.ENTER_FRAME event handler tells the world to render
private function enterFrameHandler( event : Event ) : void
{
if(rotationControl == 5) tg.rotateY +=0;
else tg.rotateY -=5;
scene.render();
if(!init) {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
init = true;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -