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

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

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

Регистрация: May 2006
Сообщений: 52
Attention Sandy 3D, Не могу справиться с MovieMaterial

Пытаюсь сделать простую вещь, изменить один из примеров с оф. сайта Sandy 3D поставив вместо битмап-текстур свои мувиклипы:
Код AS3:
package
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.display.StageDisplayState;
	import flash.events.*;
	import flash.net.URLRequest;
	import flash.ui.*;
	import flash.utils.getTimer;
 
    import sandy.core.Scene3D;
    import sandy.core.data.*;
	import sandy.core.scenegraph.*;
	import sandy.events.*;
	import sandy.materials.*;
    import sandy.materials.attributes.*;
	import sandy.primitive.*;
	import sandy.util.*;
	import sandy.view.*;
 
 
	public class index extends BasicView
	{
		public function index():void
		{
			super();
			init( 800, 600 );
			camera.setPosition( 0, 0, 0 );
			camera.fov = 60;
			planeNames = [ "side2" , "side3", "side4", "side5", "side0", "side1" ];
			loadSideMovies();
		}
 
		private var shape:SkyBox;
		private var planeNames:Array;
		private var polygons:Array;
		private var textures:Array;	
		private var running:Boolean = false;
		private var keyPressed:Array = new Array();
		private var queue:LoaderQueue = new LoaderQueue();
 
 
		public function __onKeyDown(e:KeyboardEvent):void
		{
            keyPressed[e.keyCode] = true;
            if( e.keyCode == Keyboard.SPACE )
            	stage.displayState = StageDisplayState.FULL_SCREEN;
        }
 
        public function __onKeyUp(e:KeyboardEvent):void
        {
           keyPressed[e.keyCode] = false;
        }
 
		private function clickHandler( p_oEvt:Event ):void
		{
			if( p_oEvt.type == MouseEvent.MOUSE_DOWN )
			{
				lastPanAngle = panangle;
				lastTiltAngle = tiltangle;
				lastMouseX = stage.mouseX;
				lastMouseY = stage.mouseY;
				running = true;
			}
			else
			{
				running = false;
			}
		}
 
		//  -- 
		private function loadSideMovies():void
		{
			queue = new LoaderQueue();
	        queue.add( "side0", new URLRequest("superbox/side0.swf") );
	        queue.add( "side1", new URLRequest("superbox/side1.swf") ); 
			queue.add( "side2", new URLRequest("superbox/side2.swf") );
			queue.add( "side3", new URLRequest("superbox/side3.swf") );
			queue.add( "side4", new URLRequest("superbox/side4.swf") );
			queue.add( "side6", new URLRequest("superbox/side5.swf") );
	        queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete );
	        queue.start();
		}
 
			var SideMat0:MovieMaterial = new MovieMaterial( queue.data["side0"],40 );
			var SideMat1:MovieMaterial = new MovieMaterial( queue.data["side1"],40 );
			var SideMat2:MovieMaterial = new MovieMaterial( queue.data["side2"],40 );
			var SideMat3:MovieMaterial = new MovieMaterial( queue.data["side3"],40 );
			var SideMat4:MovieMaterial = new MovieMaterial( queue.data["side4"],40 );
			var SideMat5:MovieMaterial = new MovieMaterial( queue.data["side5"],40 );
 
 
 
		private function loadComplete( event:QueueEvent ):void 
		{			
 
			createScene();
			// --
			shape.front.appearance = new Appearance(SideMat0);
			shape.back.appearance = new Appearance(SideMat1);
			shape.left.appearance = new Appearance(SideMat2);
			shape.right.appearance = new Appearance(SideMat3);
			shape.top.appearance = new Appearance(SideMat4);
			shape.bottom.appearance = new Appearance(SideMat5);				
			// --
			shape.front.enableClipping = true;
			shape.back.enableClipping = true;
			shape.left.enableClipping = true;
			shape.right.enableClipping = true;
			shape.top.enableClipping = true;
			shape.bottom.enableClipping = true;
			// --
			stage.addEventListener(MouseEvent.MOUSE_DOWN, clickHandler);
			stage.addEventListener(MouseEvent.MOUSE_UP, clickHandler);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, __onKeyDown);
			stage.addEventListener(KeyboardEvent.KEY_UP, __onKeyUp);
			// --
			render();
		}
 
		// Create the root Group and the object tree 
		private function createScene():void
		{
			shape = new SkyBox( "pano", 300, 1, 1 );
			rootNode.addChild( shape );
		}
 
		private var panangle:Number = 0;
		private var tiltangle:Number = 0;
		private var lastPanAngle:Number = 0;
		private var lastTiltAngle:Number = 0;
		private var lastMouseX:Number = 0;
		private var lastMouseY:Number = 0;
		private const toRADIANS:Number = Math.PI/180;
 
		override public function simpleRender( event : Event = null ) : void
		{
			if( running )
			{
				panangle 	=  0.3*(stage.mouseX - lastMouseX) + lastPanAngle;
				tiltangle 	= -0.3*(stage.mouseY - lastMouseY) + lastTiltAngle;
 
				if (tiltangle > 85)
					tiltangle = 85;
				if (tiltangle < -85)
					tiltangle = -85;
				camera.rotateY = panangle;
				camera.tilt = tiltangle;
				/*
				camera.lookAt(	100 * Math.sin(panangle * toRADIANS) * Math.cos(tiltangle * toRADIANS),// + camera.x,
								100 * Math.cos(panangle * toRADIANS) * Math.cos(tiltangle * toRADIANS),// + camera.z,
								100 * Math.sin(tiltangle * toRADIANS)// + camera.y
							);
				*/
			}
 
			super.simpleRender( event );
		}
	}
}
Флэш выдает:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at sandy.materials::MovieMaterial()
at index()

Думаю я упускаю что-то простое и очевидное для программиста, но будучи дизигнером в упор не вижу в чем проблема, научный тык и гугление пока не помогли, помогите люди добрые, ткните носом

Добавлено через 5 минут
UPD: Уточню что именно я менял: добавил импорт недостающих классов sandy из примера с клипами, добавил функцию loadSideMovies(), задал материалы так:
Код AS3:
var SideMat0:MovieMaterial = new MovieMaterial( queue.data["side0"],40 );
, назначил материалы поверхностям.


Последний раз редактировалось unused_name; 18.03.2010 в 14:40.
Создать новую тему   Часовой пояс GMT +4, время: 18:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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