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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 09.04.2009, 10:45
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 1  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
Tools InteractiveMovieMaterial

Приветствую Вас.
Хочу реализовать в Papervision3D 2 плэйн с интерактивной текстурой, т.е. с мувиком сделанным во флэше.
Для этого объявляю в файле (далее ВНЕШНИЙ КОД) ComponentMaterialTest.as сцену, камеру, плэйн с этой текстурой... ну всё как полагается и в результате получается плэйн с MovieClip материалом:
Код AS3:
package
{
	import fl.core.UIComponent;
 
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageQuality;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
	import flash.utils.getDefinitionByName;
 
	import org.papervision3d.cameras.CameraType;
	import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.materials.MovieMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.stats.StatsView;
 
	public class ComponentMaterialTest extends Sprite
	{
		public var mc							:MovieClip;
 
 
		public var view							:BasicView = new BasicView(0,0, true, true, CameraType.FREE);
		public var plane						:Plane;
		public var mat							:MovieAssetMaterial;
		public var movieMat						:MovieMaterial;
		public var movie						:Sprite;
		public var uiCounter					:Number = 0;
 
		public function ComponentMaterialTest()
		{
			super();
			addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
		}
 
		protected function init(e:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.quality = StageQuality.MEDIUM;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_RIGHT;
 
			var RUSMAP:Class = getDefinitionByName("RUSSIA_MAP") as Class;
			movie = new RUSMAP() as Sprite;
			//movie.x = movie.y = -10000; 
			movie.x=movie.y=-1000;
 
			parseComponents();
			addChild(movie);
 
			view.camera.zoom = 20;
			view.camera.focus = 40;
 
			addChild(view);
			//addChild(new StatsView(view.renderer));
			addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
 
 
		}
 
		protected function createPlane():void
		{
			// Определяются размеры (границы) текстуры
			movieMat = new MovieMaterial( movie, true, true, false, new Rectangle(0,0,1024,512) );
			movieMat.oneSide = false;
			movieMat.setQuality(StageQuality.HIGH, stage, true);
			movieMat.interactive = true;
			movieMat.smooth = true;
 
			plane = new Plane(movieMat,1024,512,8,6);
			view.scene.addChild(plane);  
		}
 
		protected function loop(e:Event):void
		{
			var sw:Number=(stage.width+movie.x)/2;
			var sh:Number=(stage.height+movie.y)/2;
 
			var angleX:Number=(mouseX-sw)/40;
			plane.rotationY+=(angleX-plane.rotationY)*0.1;
 
			var angleY:Number=(mouseY-sh)/40;
			plane.rotationX+=(angleY-plane.rotationX)*0.1;		
 
			//trace("sw="+sw);
			view.singleRender();
		}		
 
		protected function handleComponentReady(e:Event):void
		{
			var uiComponent:UIComponent = UIComponent(e.currentTarget);
			uiComponent.removeEventListener(Event.ADDED_TO_STAGE, handleComponentReady);
			uiCounter--;
			if( uiCounter == 0 ) createPlane();
		}
 
		protected function parseComponents():void
		{
			uiCounter = 0;
			for( var i:int = 0; i<movie.numChildren; i++)
			{
				var mc:DisplayObject = DisplayObject(movie.getChildAt(i));
				if( mc is UIComponent ) 
				{
					mc.addEventListener(Event.ADDED_TO_STAGE, handleComponentReady, false, 0, true);
					uiCounter++;
				}
			}
			trace(uiCounter);
		}
	}
}
Рядом с файлом лежит флэш файл класса ComponentMaterialTest в котором и создана текстура(MovieClip) класса RUSSIA_MAP лежит в библиотеке. Эта текстура представляет из себя подобие слайдшоу. Т.е. картинки и кнопочки для переключения между ними(картинками). Так вот функции для кнопочек описаны внутри текстуры и работают только в этом мувике. Картинки переключаются и я всё это вижу на плэйне, который эффектно вращается.
ТЕПЕРЬ СУТЬ ВОПРОСА:
Я захотел при клике на кнопку текстуры передать сигнал во внешний код (вызвать функцию из ВНЕШНЕГО КОДА). Например скрыть Плэйн и показать Куб. Как это реализовать?
Нашёл некоторые примеры в гугле и обнаружил что там используется некий класс InteractiveMovieMaterial. Вот код одного японца:
Код AS3:
package {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.cameras.FreeCamera3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.InteractiveColorMaterial;
	import org.papervision3d.materials.InteractiveMovieMaterial;
	import org.papervision3d.materials.MaterialsList;
	import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.materials.MovieMaterial;
	import org.papervision3d.objects.Cube;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.Plane;
	import org.papervision3d.scenes.InteractiveScene3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.utils.InteractiveSceneManager;
	import org.papervision3d.utils.InteractiveSprite;
 
	[SWF(width="400", height="300", frameRate="30", backgroundColor="#000000")]
	public class PaperVisionTest1 extends Sprite
	{
		protected var container 				:Sprite;
		protected var scene     				:InteractiveScene3D;
		protected var camera   					:Camera3D;
		protected var ism						:InteractiveSceneManager;
		protected var plane	 	 				:Plane;
		private var mycube:Cube;
 
		public function PaperVisionTest1():void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			init3D();
			createPlane();
			addEventListener(Event.ENTER_FRAME, loop);
		}
 
		protected function init3D():void {
			container = new InteractiveSprite();
			addChild(container);
			container.name = "mainCont";
			container.x = stage.stageWidth*.5;
			container.y = stage.stageHeight*.5;
 
			scene = new InteractiveScene3D(container);
			ism = scene.interactiveSceneManager;
 
			camera = new Camera3D();
			camera.zoom = 3;
			camera.focus = 100;
		}
 
		protected function createPlane():void {
			var c:CubeMaterial = new CubeMaterial();
			var c2:CubeMaterial = new CubeMaterial();
			var c3:CubeMaterial = new CubeMaterial();
			var material:MovieMaterial = new InteractiveMovieMaterial(c3, true, true);
			material.animated = true;
			material.smooth = true;
 
		var materials:MaterialsList = new MaterialsList(
		{
			//all:
			front:  new MovieMaterial(c, false, true),
			back:   new MovieMaterial(c, false, true),
			right:  new MovieMaterial(c2, false ,true),
			left:   new InteractiveMovieMaterial(c, false, true),
			top:    new MovieMaterial(c, false, true),
			bottom: new MovieMaterial(c)
		} );
			var mm:MovieMaterial = materials.getMaterialByName("right") as MovieMaterial;
			mm.texture.gotoAndStop(6);
			mm.doubleSided = true;
 
			mycube = new Cube( materials);
			scene.addChild(mycube);
			mycube.x = -300;
 
			plane = new Plane( material, 500, 500);
			plane.x = 600;
			plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleMainClick);
			mycube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleMainClick2);
			scene.addChild(plane);
		}
		protected function loop(event:Event):void {
			camera.x = -(container.mouseX * 3)/2;
			camera.y = (container.mouseY * 3);
			scene.renderCamera(camera);
		}
		protected function handleMainClick(e:InteractiveScene3DEvent):void {
			trace("mouse click from: ", e.currentTarget, e.displayObject3D, e.sprite, e.target);
			var do3d:DisplayObject3D = e.target as DisplayObject3D;
			var mm:MovieMaterial = e.target.material as MovieMaterial;
			mm.texture.gotoAndStop(Math.floor(Math.random() * 6) + 1);
		}
		protected function handleMainClick2(e:InteractiveScene3DEvent):void {
			trace("mouse click from: ", e.currentTarget, e.displayObject3D, e.sprite, e.target);
		}
	}
}
От куда у него этот:import org.papervision3d.materials.InteractiveMovieMaterial; ?
У меня Public Beta 2.0 - Great White December 3rd, 2008 и нет такого класса. Может кто то знает где его найти или какой то иной способ помочь мне решить задачу? Подскажите, люди добрые кто чем может

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

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

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


 


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


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