Показать сообщение отдельно
Старый 20.03.2009, 06:41
homersib вне форума Посмотреть профиль Отправить личное сообщение для homersib Найти все сообщения от homersib
  № 3  
Ответить с цитированием
homersib

Регистрация: Oct 2008
Сообщений: 6
Кубик! Я ведь написал...
Код AS3:
package {
	import flash.display.Sprite;
	import flash.ui.Keyboard;
	import flash.events.KeyboardEvent;
	import flash.events.Event;
 
	import org.papervision3d.scenes.*;
	import org.papervision3d.cameras.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.render.*;
	import org.papervision3d.view.*;
 
	import caurina.transitions.Tweener;
 
	public class Cube extends Sprite {
 
		// ----------------------------------------------------------------------------
		// PUBLIC STATIC CONSTANTS
		// ----------------------------------------------------------------------------
 
		public static const VERSION:String = "1.0";
 
		// ----------------------------------------------------------------------------
		// CLASS PROPERTIES
		// ----------------------------------------------------------------------------
 
		private var _viewport:Viewport3D;
		private var _renderer:BasicRenderEngine;
		private var _scene:Scene3D;
		private var _camera:Camera3D;
 
		private var _cube:Cube;
 
		private var _animationInProgress:Boolean = false;
 
		// ----------------------------------------------------------------------------
		// GETTERS AND SETTERS
		// ----------------------------------------------------------------------------
 
 
 
		// ----------------------------------------------------------------------------
		// CONSTRUCTOR
		// ----------------------------------------------------------------------------
 
		public function Cube() {
			stage.addEventListener(KeyboardEvent.KEY_UP, globalKeyBoardListener);
			stage.focus = stage;
 
			build3D();
			trace(_cube.rotationX, _cube.rotationY, _cube.rotationZ);
		}
 
		// ----------------------------------------------------------------------------
		// PRIVATE METHODS
		// ----------------------------------------------------------------------------
 
		private function build3D():void {
			_viewport = new Viewport3D(0, 0, true, true);
			_viewport.buttonMode = true;
			addChild(_viewport);
 
			_renderer = new BasicRenderEngine();
 
			_scene = new Scene3D();
 
			var _materialList:MaterialsList = new MaterialsList(); 
			_materialList.addMaterial(new ColorMaterial(0xFF0000, 1, true), "front");
			_materialList.addMaterial(new ColorMaterial(0x0066CC, 1, true), "back");
			_materialList.addMaterial(new ColorMaterial(0x006600, 1, true), "left");
			_materialList.addMaterial(new ColorMaterial(0xFFCC00, 1, true), "right");
			_materialList.addMaterial(new ColorMaterial(0x000000, 1, true), "top");
			_materialList.addMaterial(new ColorMaterial(0x333333, 1, true), "bottom");
 
			_cube = new Cube(_materialList, 300, 300, 300, 1, 1, 1);
 
			_scene.addChild(_cube);
 
			_camera = new Camera3D();
			_camera.zoom = 110;
			_camera.focus = 10;
			_camera.x = 400;
			_camera.y = 400;
			_camera.lookAt(_cube);
 
			this.addEventListener(Event.ENTER_FRAME, renderFrame);
		}
 
		private function animationComplete():void {
			_animationInProgress = false;
			_cube.rotationX %= 360;
			_cube.rotationY %= 360;
			_cube.rotationZ %= 360;
			trace(_cube.rotationX, _cube.rotationY, _cube.rotationZ);
		}
 
		private function rotateCube(_rotationX:int, _rotationY:int):void {
			if (!_animationInProgress) {
				_animationInProgress = true;
				var xRotation:int = _cube.rotationX + _rotationX;
				var yRotation:int = _cube.rotationY + _rotationY;
				Tweener.addTween(_cube, {rotationX:xRotation, rotationY:yRotation, time:0.3, transition:"linear", onComplete:animationComplete});
			};
		}
 
		private function globalKeyBoardListener(event:KeyboardEvent):void {
			switch (event.keyCode) {
				case Keyboard.UP:
					rotateCube(90, 0);
					break;
				case Keyboard.DOWN:
					rotateCube(-90, 0);
					break;
				case Keyboard.LEFT:
					rotateCube(0, 90);
					break;
				case Keyboard.RIGHT:
					rotateCube(0, -90);
					break;
				default:
 
					break;
			}
		}
 
		private function renderFrame(event:Event):void {
			_renderer.renderScene(_scene, _camera, _viewport);
		}
 
		// ----------------------------------------------------------------------------
		// PUBLIC METHODS
		// ----------------------------------------------------------------------------
 
 
	}
}