|
|
|||||
прелоадер + 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"); , то выдаёт ошибку : Цитата:
ОПИСАНИЕ ФАЙЛОВ: Preloader.as 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); } } } 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); } } } 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");} |
|
|||||
Без прелоудерв вообще код
вызывает ошибку или нет? судя по всему, вам как совет протрейсить каждую переменную в конструкторе. |
|
|||||
Без прелоудера эта строчка так же будет ругаться. Весь код до этой строчке в прелоудере работает. Оставив только её, выйдет та же ошибка. Отдельно этот класс работает как часы.
Последний раз редактировалось 3Desian; 28.05.2009 в 13:00. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Зачем вы убрали строку с getDefinition? Без неё смысла от прелоадера уже нет. Прочитайте статью ещё раз.
|
|
|||||
А без неё работает и тот пример, по которому я и делал, но если использовать класс Program.as. Если дело было бы в getDefinition, то не работала бы и с Program.as. Но возможно Вы можете дать объяснение этому более детально? Я сам не вижу смысла в getDefinition.
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Смысл getDefinition*в том, чтобы явно не упоминать класс программы в первом кадре ролика. Если явно упомянуть рутовый класс программы, тогда он будет экспортирован в первом кадре, вместе с остальными классами, утяжелив этот самый первый кадр. При этом будет потеряно всё их графическое содержимое.
Впрочем, в данном случае не работает всё из-за того, что идет обращение к stage в конструкторе, вместо того, чтобы дождаться добавления на сцену. |
|
|||||
Уважаемый __etc, есть ли предложение как поправить сие преступление?
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Прочитайте последнее предложение из моего предыдущего поста.
|
|
|||||
Цитата:
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
3Desian, что конкретно непонятно? Вы понимаете, как работает ваш собственный код или вы его по кускам собрали из закоулков инета?
|
Часовой пояс GMT +4, время: 08:53. |
|
« Предыдущая тема | Следующая тема » |
|
|