Contoh menggerakkan objek dalam 3D space dengan menggunakan Tweener Animation engine.
Document Class ( Main )
package {
import away3d.cameras.HoverCamera3D;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.core.base.Object3D;
import away3d.core.render.BasicRenderer;
import away3d.events.MouseEvent3D;
import away3d.materials.WireColorMaterial;
import away3d.core.math.*;
import away3d.primitives.Sphere;
import away3d.primitives.Plane;
import caurina.transitions.Tweener;
import flash.display.*;
import flash.events.*;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class Main extends Sprite {
private var _view:View3D;
private var _camera:HoverCamera3D;
private var _scene:Scene3D;
private var _renderer:BasicRenderer;
public function Main() {
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.textColor = 0xCCCCCC;
tf.text = “Click & drag your mouse to move the camera \nClick anywhere to tween the sphere to a random xyz position”;
tf.x = 5;
tf.y = 5;
addChild(tf);
initAway();
initGroundPlane();
init3DObject();
}
private function initAway():void{
_camera = new HoverCamera3D( { zoom:3, focus:200, distance:4000 } );
_camera.tiltangle = 0;
_camera.mintiltangle = -90;
_camera.maxtiltangle = 90;
_camera.panangle = 45;
_camera.yfactor = 1;
_scene = new Scene3D();
_renderer = new BasicRenderer();
_view = new View3D({camera:_camera,scene:_scene,renderer:_renderer});
_view.x = 200;
_view.y = 200;
addChild(_view);
addEventListener(Event.ENTER_FRAME,enterFrameListener);
}
private function init3DObject():void {
var sphere:Sphere = new Sphere( { name:”My3DObject”, radius:90, segmentsW:8, segmentsH:8, x:0, y:200, z:0 } );
var init:Object = { alpha:1,wirecolor:0×80FFFF,wirealpha:.5,width:.1 };
sphere.material = new WireColorMaterial(0×0080FF,init);
_scene.addChild(sphere);
}
private function initGroundPlane():void {
var init:Object = { };
init.width = 2000;
init.height = 2000;
init.segments = 2;
init.x = 0,
init.y = 0;
init.z = 0;
init.material = new WireColorMaterial(0xE36F28,{ alpha:.5,wirecolor:0×804040,wirealpha:.5,width:.1 });
init.name = “floor”;
var plane:Plane = new Plane(init);
plane.mouseEnabled = true;
plane.bothsides = true;
_scene.addChild(plane)
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private var _oldX:Number;
private var _oldY:Number;
private function onMouseDown(e:MouseEvent):void {
_oldX = stage.mouseX;
_oldY = stage.mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
var s:Object3D = _scene.getChildByName(”My3DObject”);
var x1:Number = (Math.random() * 2000) - 1000;
var z1:Number = (Math.random() * 2000) - 1000;
var y1:Number = (Math.random() * 1200) - 600;
Tweener.addTween(s, { x:x1,z:z1, y:y1,time:2, transition:”easeInOut”} );
}
private function onMouseMove(e:MouseEvent):void {
if (stage.mouseX > _oldX) {
_camera.targetpanangle -= (stage.mouseX - _oldX);
}else {
_camera.targetpanangle += (_oldX- stage.mouseX);
}
if (stage.mouseY > _oldY) {
_camera.targettiltangle -= (stage.mouseY - _oldY);
}else{
_camera.targettiltangle += (_oldY - stage.mouseY);
}
_oldX = stage.mouseX;
_oldY = stage.mouseY;
}
private function onMouseUp(e:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
private function enterFrameListener(e:Event):void {
var my3dObject:Object3D;
if (_scene.getChildByName(”My3DObject”)) {
my3dObject = _scene.getChildByName(”My3DObject”);
my3dObject.yaw(1);
my3dObject.roll(1);
my3dObject.pitch(1);
}
_camera.hover();
_view.render();
}
}
}