Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.05.2011, 21:15
necrommx вне форума Посмотреть профиль Отправить личное сообщение для necrommx Найти все сообщения от necrommx
  № 1  
Ответить с цитированием
necrommx

Регистрация: May 2011
Сообщений: 10
По умолчанию Добавление 3D на MovieClip

Добрый вечер, интересует такой вопрос как добавить 3D объект в определённое место на сцене.
Т.е есть movie clip и в нём ещё 2 movie клипа, в movie clip 1 должна быть интерактивная часть, при наведении мыши в movie clip 2 должно выводится сообщение, как такое реализовать не совсем понятно, подскажите кто знает.
Пример во вложении.
Исходник кода вот. Использую движок PV3D
Код AS3:
package
{
	import flash.geom.Rectangle;
	import flash.events.*;
	import flash.ui.Keyboard;
	import org.papervision3d.cameras.CameraType;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.objects.DisplayObject3D;
 
 
	[SWF(width="512", height="576")]
	public class BookContent extends BasicView
	{
		public var keyForward:Boolean;
		public var keyBackward:Boolean;
		public var keyLeft:Boolean;
		public var keyRight:Boolean;
 
		private var isOribiting:Boolean = false;
		private var cameraPitch:Number = 90;
		private var cameraYaw:Number = 270;
		private var cameraTarget:DisplayObject3D = DisplayObject3D.ZERO;
		private var differenceX:Number = 0;
		private var differenceY:Number = 0;
 
		public function BookContent ()
		{
			super(512,576,true,false,CameraType.FREE);
			addEventListener(Event.ADDED_TO_STAGE,initCameraControll);
			//initCameraControll();
 
			//camera.x = 400;
			//camera.y = 400;
 
 
			init ();
			startRendering ();
 
		}
		private function init ():void
		{
			viewport.interactive = true;
 
			for (var i:int=0; i < 20; i++)
			{
				var plane_mat = new ColorMaterial(Math.random() * 0xFFFFFF);
				plane_mat.smooth = true;
				plane_mat.doubleSided = true;
				plane_mat.interactive = true;
 
				var plane_obj = new Plane(plane_mat,200,200,1,1);
				plane_obj.addEventListener (InteractiveScene3DEvent.OBJECT_OVER , doInteractions);
				plane_obj.x = Math.random() * 800 - 400;
				plane_obj.y = Math.random() * 800 - 400;
				plane_obj.z = Math.random() * 800 - 400;
				scene.addChild (plane_obj);
			}			
		}
		private function doInteractions (e:InteractiveScene3DEvent):void
		{
			camera.target = e.displayObject3D;
		}
 
		override protected function onRenderTick (event:Event = null):void
		{
			moveCamera ();			
			super.onRenderTick ();
		}
 
		// Управление Камерой
		private function initCameraControll (event:Event):void
		{
			stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler);
			stage.addEventListener (KeyboardEvent.KEY_UP, keyUpHandler);
		}
 
		private function keyDownHandler (e:KeyboardEvent):void
		{
			switch (e.keyCode)
			{
				case "W".charCodeAt() :				
					keyForward = true;
					break;
				case "S".charCodeAt() :				
					keyBackward = true;
					break;
				case "A".charCodeAt() :				
					keyLeft = true;
					break;
				case "D".charCodeAt() :				
					keyRight = true;
					break;
			}
		}
		private function keyUpHandler (e:KeyboardEvent):void
		{
			switch (e.keyCode)
			{
				case "W".charCodeAt() :				
					keyForward = false;
					break;
				case "S".charCodeAt() :				
					keyBackward = false;
					break;
				case "A".charCodeAt() :				
					keyLeft = false;
					break;
				case "D".charCodeAt() :				
					keyRight = false;
					break;
			}
		}
		private function moveCamera ():void
		{
			if (keyForward)
			{
				//camera.zoom += 1;
				camera.moveForward (30);
			}
			else if (keyBackward)
			{
				//camera.zoom -= 1;
				camera.moveBackward (30);
				//if ( camera.scaleZ == 100 || camera.scaleZ == -100)
					//camera.scaleZ = 0;
				//else
					//camera.moveBackward (30);
			}
			if (keyRight)
			{
				isOribiting = true;
				differenceX = stage.x + 1;
				//camera.moveRight (5);
				//camera.localRotationY+=1;
			}
			else if (keyLeft)
			{
				isOribiting = true;
				differenceX = stage.x - 1;
 
				//camera.moveLeft (5);
				//camera.localRotationY -= 1;
 
			}
			if (isOribiting) {
				cameraYaw += differenceX;				
				cameraPitch += differenceY;
 
				cameraPitch %= 360;
				cameraYaw %= 360;
				cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001;
				cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999;
 
				camera.orbit(cameraPitch, cameraYaw, true, cameraTarget);
				isOribiting = false;
			}
 
		}
	}
}
И ещё один вопрос, как ограничить приближении камеры, т.е методы moveBackward (Forward )
Изображения
 

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.