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

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

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

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

Приветствую знатоков темы.
Делаю прелоадер по примеру: http://etcs.ru/blog/as3/export_in_se...ame_flash_cs3/
и получается вот что: Есть Файл Preloader.fla + класс Preloader.as + класс Program.as + класс ComponentMaterialTest.as.
Если я в Preloader.as пишу:var program:Sprite = new Program as Sprite;, то работает прелоадер и сама программа...
Если в Preloader.as пишу: var program:ComponentMaterialTest = new ComponentMaterialTest(800, 600, false, true, "CAMERA3D"); , то выдаёт ошибку :
Цитата:
INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at ComponentMaterialTest()
at Preloader/main()
at Preloader/enterFrameHandler()
ПОЧЕМУ ТАК? Помогите разобраться пожалуйста.
ОПИСАНИЕ ФАЙЛОВ:
Preloader.as
Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	import org.papervision3d.view.*;
 
	public class Preloader extends MovieClip {
 
		private var progressBar:Sprite;
		var program:Sprite;
 
		public function Preloader() {
			//super();
			stop();// стоп в первом кадре
			progressBar = getChildByName("loadingLine") as Sprite; // полоска прелоадера с именем "pBar" со сцены
			progressBar.scaleX = 0;// размер полоски изначально
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);// подпись содержимого загрузчика флэшки
			loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
 
		}
		// Процесс загрузки
		private function progressHandler(event:ProgressEvent):void {
			var loaded:uint = event.bytesLoaded; // загружено байт
			var total:uint = event.bytesTotal;	 // общий объём загружаемой флэшки
			progressBar.scaleX = loaded/total;	 // изменение размера полоски
		}
		// Загрузка завершена
		private function completeHandler(event:Event):void {
			play(); // запустить ролик
			addEventListener(Event.ENTER_FRAME, enterFrameHandler); //при ENTR_FRAME
		}
 
		private function enterFrameHandler(event:Event):void {
			if (currentFrame >= 2) { // если номер текущего кадра = 2
				removeEventListener(Event.ENTER_FRAME, enterFrameHandler);// то убрать подпись по событию ENTER_FRAME
				stop(); // и вообще тормазнуть ролик
				main();// запустить код
			}
		}
 
		private function main():void {
			// С этим работает
			var program:Sprite = new Program as Sprite; 
                        // С этим не работает
			//var program:ComponentMaterialTest = new ComponentMaterialTest(800, 600, false, true, "CAMERA3D"); 
 
			addChild(program);
 
		}
	}
}
Program.as - Проверочная программка работает
Код AS3:
package {
	import flash.display.*;
	import flash.text.*;
 
	public class Program  extends Sprite{
		private var txt:TextField;
		public function Program() {
			//TEXT FIELD			
			txt= new TextField();
			txt.selectable = false;
			txt.width = 500;
			txt.textColor = 0x555566;
			txt.text = "LOADING COMPLETE"; //ahtungReturn
			txt.y =200;
			txt.x =200;
			addChild(txt);
			trace("Program starting");
 
 
			var object:MovieClip = new Star as MovieClip;
 
			addChild(object);
		}
	}
}
ComponentMaterialTest.as - Нужная программка не работает
Код AS3:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.Rectangle;
	import flash.utils.*;
	import flash.net.*;
    import flash.system.fscommand;
	import flash.external.ExternalInterface;
	import flash.filters.*;
	import flash.text.*;
 
 
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.cameras.CameraType;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.cameras.FreeCamera3D;
 
 
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.view.stats.StatsView;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.core.components.as3.utils.ObjectController;
	import org.papervision3d.core.proto.*;
	import caurina.transitions.Tweener;
	import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.shadematerials.*;
	import org.papervision3d.materials.special.*;
	import org.papervision3d.materials.shaders.*;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.utils.*;
 
 
	import creator.IVModel;
 
 
 	public class ComponentMaterialTest extends BasicView
	{	
 
		// OBJECT
		public var ObjectGroup: Sphere;
		private var fon:Sprite;
 
		private var nameOfSelected3DObject:String="NameOfTheObject"; // имя выбранного объекта
 
// Up menu
 
		private var but_BackToMap:MovieClip ;
		private var but_BackToOut:MovieClip;
 
// HELPERS
		private var classname:String;
		private var tempMaterial:MaterialObject3D;
		private var img:Loader;
		private var matArray:Array = new Array();;
 
//Materials
		private var ObjectGroupMat:ColorMaterial;
		private var greenMat:GouraudMaterial;	
		private var testMat:GouraudMaterial;
		private var matList:MaterialsList;
 
		public var plane						:Plane;
		public var movieMat						:MovieMaterial;
		public var movie						:MovieClip;
 
//CAMERA
		private var TargetSphere:Sphere;
		private var isOribiting:Boolean;
		private var previousMouseX:Number;
		private var previousMouseY:Number;
		private var differenceX:Number = 0;
		private var differenceY:Number =0;
		private var cameradelta=35;
 
// LIGHT
		private var light:PointLight3D= new PointLight3D(true);
 
//XML
 
		private var numberOfObject:int = 0; 					//номер загружаемой из массива геометрии
		private var requestArrayGeometry:Array = new Array();	//массив адресов на XML файлы
		private var spisok: XML;
		private var spisokLoader:URLLoader;
		private var xmlListGeometry:XMLList;
		private var xmlListCameras:XMLList;
 
//TEXT FIELD
 
		private var txt:TextField;
 
 
//START
		public function ComponentMaterialTest(viewportWidth:Number=800, viewportHeight:Number=600, scaleToStage:Boolean=false, interactive:Boolean=true, cameraType:String="CAMERA3D")
		{
 
 
/***************************************   НАСТРОЙКИ STAGE   ***************************************/
			super(viewportWidth, viewportHeight, scaleToStage, interactive, FreeCamera3D.TYPE);
			stage.align = StageAlign.TOP;
			stage.scaleMode = StageScaleMode.SHOW_ALL;
			stage.quality = StageQuality.MEDIUM;
 
 
/*************************************   ПОДПИСЬ STAGE на события   ************************************/
			addEventListener(Event.ENTER_FRAME, EnterFrame);
 
			//MOUSE EVENTS
			addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
			addEventListener(MouseEvent.MOUSE_UP, MouseUp);
			addEventListener(MouseEvent.MOUSE_WHEEL, MouseWHELL);
 
/**************************************   MATERIALS   ***********************************************/
			//MATERIALS LIST
			matList = new MaterialsList();
 
			//SelectedMaterial
			var selectedMat:ColorMaterial = new ColorMaterial (0x000099,0.7);
			selectedMat.interactive=true;
			matList.addMaterial(selectedMat as MaterialObject3D  , "selectedMat");
 
 
 
/********************************************   OBJECTS   ********************************************/
			CreateMap();// запуск функций, которые я не буду описывать тут 
			CreateObjectGroup();//с целью экономии места
/********************************************   Camera   *********************************************/
			camera.focus = 20;
			camera.zoom = 30;
			camera.y = plane.y;
			camera.z = plane.z-1000;
			camera.x = plane.x;
			camera.rotationY = 0;
 
/********************************************   Vievport   *********************************************/
			viewport.buttonMode = true;
 
/**********************************************   Light   ***********************************************/
			light.x=1000;
			light.y=2000;
 
 
 
			loadXML();
		}
protected function CreateMap():void
		{ trace ("bla-bla");}
protected function CreateObjectGroup():void
		{ trace ("bla-bla");}
private function EnterFrame(event:Event=null):void
		{ singleRender();}
public function MouseWHELL(event:MouseEvent):void
		{ trace ("bla-bla");}
public function MouseDown(event:MouseEvent): void
		{ trace ("bla-bla");}
public function MouseUp(event:MouseEvent): void
		{ trace ("bla-bla");}

Старый 28.05.2009, 12:25
Gladreaman вне форума Посмотреть профиль Отправить личное сообщение для Gladreaman Найти все сообщения от Gladreaman
  № 2  
Ответить с цитированием
Gladreaman
 
Аватар для Gladreaman

Регистрация: Mar 2009
Адрес: Европа
Сообщений: 35
Записей в блоге: 1
Без прелоудерв вообще код
Код AS3:
var program:ComponentMaterialTest = new ComponentMaterialTest(800, 600, false, true, "CAMERA3D");
вызывает ошибку или нет? судя по всему, вам как совет протрейсить каждую переменную в конструкторе.

Старый 28.05.2009, 12:57
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 3  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
Без прелоудера эта строчка так же будет ругаться. Весь код до этой строчке в прелоудере работает. Оставив только её, выйдет та же ошибка. Отдельно этот класс работает как часы.


Последний раз редактировалось 3Desian; 28.05.2009 в 13:00.
Старый 28.05.2009, 13:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Зачем вы убрали строку с getDefinition? Без неё смысла от прелоадера уже нет. Прочитайте статью ещё раз.

Старый 28.05.2009, 13:05
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 5  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
А без неё работает и тот пример, по которому я и делал, но если использовать класс Program.as. Если дело было бы в getDefinition, то не работала бы и с Program.as. Но возможно Вы можете дать объяснение этому более детально? Я сам не вижу смысла в getDefinition.

Старый 28.05.2009, 13:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Смысл getDefinition*в том, чтобы явно не упоминать класс программы в первом кадре ролика. Если явно упомянуть рутовый класс программы, тогда он будет экспортирован в первом кадре, вместе с остальными классами, утяжелив этот самый первый кадр. При этом будет потеряно всё их графическое содержимое.

Впрочем, в данном случае не работает всё из-за того, что идет обращение к stage в конструкторе, вместо того, чтобы дождаться добавления на сцену.

Старый 28.05.2009, 13:16
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 7  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
Уважаемый __etc, есть ли предложение как поправить сие преступление?

Старый 28.05.2009, 13:19
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Прочитайте последнее предложение из моего предыдущего поста.

Старый 28.05.2009, 13:59
3Desian вне форума Посмотреть профиль Отправить личное сообщение для 3Desian Найти все сообщения от 3Desian
  № 9  
Ответить с цитированием
3Desian
 
Аватар для 3Desian

Регистрация: Mar 2007
Сообщений: 142
Отправить сообщение для 3Desian с помощью ICQ
Цитата:
Впрочем, в данном случае не работает всё из-за того, что идет обращение к stage в конструкторе, вместо того, чтобы дождаться добавления на сцену.
Не совсем понимаю.

Старый 28.05.2009, 14:10
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
3Desian, что конкретно непонятно? Вы понимаете, как работает ваш собственный код или вы его по кускам собрали из закоулков инета?

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

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

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


 


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


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