Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос про Preloader (http://www.flasher.ru/forum/showthread.php?t=163047)

savva 06.08.2011 01:05

Вопрос про Preloader
 
Здравствуйте.

Я никак не могу понять как правильно приделать прелоадер.

Проблема в том что мои классы подключаются к main отдельно.

ТО есть у меня в main происходит следующее

Код AS3:

public class Main extends Sprite        
        {
        [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class;
        private var sc:Scene;
                public function Main()
                {
        var file:ByteArray = ((new EmbedModel()) as ByteArray);
                        var str:String = file.readUTFBytes( file.length );
                        var xml:XML = new XML( str );
                        sc = new Scene(xml);
                        stage.addChild(sc);

Соответственно мне нужно прелоадер(метатег Frame) добавлять в класс сцена.
То есть мне нужно сделать свой класс Preloader extends Movieclip в котором будет вызываться класс сцена?А что мне тогда делать с main?

Мне нужно чтобы прелоадер дождался пока все 3D объекты добавятся на сцену(они добавляются в классе сцена).Как мне нужно всё это дело организовать?

dimarik 06.08.2011 01:07

А вот запятые стройным рядом: ", , , , ". Берите, мне не жалко!

СлаваRa 06.08.2011 01:10

Посмотрите предыдущее темы в этой ветке, недавно поднимался вопрос.
Или посмотрите как организован проект со встроенным preloader'ом во FlashDevelop.

savva 06.08.2011 01:15

Там прелоадер прикручивается к main проекту. А мне нужно чтобы мои классы были отдельны, то бишь кто-либо в main пишет
Код AS3:

sc = new Scene(xml);

И там, внутри, в классе scene появлялся загрузчик (кстати, я не понимаю как он (загрузчик) понимает, что сцена загрузилась и её нужно только показать), который показывал, что сцена загрузилась на "10%" и т.д.

Извините за пунктуацию,никогда не был силён в ней:)

dimarik 06.08.2011 01:16

Уже лучше. Чуть поправил. Но все равно звучит угрожающе.

СлаваRa 06.08.2011 01:23

А что такое 'Scene' и почему загрузчик должен быть в этом классе?
Объясните смысл вашей "работы", как-то более понятно.

savva 06.08.2011 01:34

Разрабатываю набор классов, для отрисовки произвольной 3D сцены исходя из данных полученных по XML файлу.По задумке, человеку использующему мои классы, требуется лишь сделать Embed Xml файла в Main и передать XML файл в сцену.А дальше мои классы сами уже производят разбор XML, добавление объектов(2D и 3D), прикручивают слушатели мыши и клавы.
Соответственно хочется добавить ко всему этому прелоадер сцены,поскольку 2D объекты отображаются почти моментально, а 3D объекты с задержкой (весомой задержкой).

Итог: хочу,чтобы сначала произвелась полная загрузка сцены (всех объектов 2D и 3D) и лишь потом они появились. А пока идёт загрузка просто висела по центру экрана какая-нибудь инфа о степени готовности загрузки.

Вопрос как это притворить в жизнь?

И ещё вопрос такой
можно ли из
Код AS3:

public class Main extends Sprite        
        {
        [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class;
        private var sc:Scene;
                public function Main()
                {
        var file:ByteArray = ((new EmbedModel()) as ByteArray);
                        var str:String = file.readUTFBytes( file.length );
                        var xml:XML = new XML( str );
                        sc = new Scene(xml);
                        stage.addChild(sc);

Вытащить
Код AS3:

var file:ByteArray = ((new EmbedModel()) as ByteArray);
                        var str:String = file.readUTFBytes( file.length );
                        var xml:XML = new XML( str );

И закинуть в класс сцену,а в main делать так:
Код AS3:

 [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class; 
        private var sc:Scene;
                public function Main()
                {
                        sc = new Scene(new EmbedModel());
                        stage.addChild(sc);

Если да то какой параметр указывать в конструкторе класса сцены?

СлаваRa 06.08.2011 01:44

Загрузка, по логике, это когда, что-то грузится, у Вас, я так понимаю, ничего не грузится.
Как вариант, если я Вас правильно понял. При начале построения, как только получаете заветный xml, выдайте пользователю сообщение о начале инициализации объектов, дождитесь завершения, убери сообщение, показывайте созданное.

насчет "вытащить", с чем работает Ваш основной класс, с какими данными?

dimarik 06.08.2011 01:45

savva, откровенно говоря, лучше создавать такие темы в соответствующем разделе.

Никто не говорит "набор классы".
Обычно вставляют запятые.
А теперь поразите меня своей идеей, тем что еще не было на flasher.ru
XML как источник данных -- это настолько набило оскомину, что скучно. Вы хотели предложить что-то новое?
MVC не пробовали на вкус?

savva 06.08.2011 02:27

2 СлаваRa
Я имел ввиду создание и парсирование объектов(в xml находятся url адреса моделей 3DS Max, которые парсируются соответствующими методами).

А какой event я должен слушать,чтобы понять что все объекты созданы и уже готовы к выводу на сцену?

на данный момент происходит вот так:
Код AS3:

        //Инициализация сцены
                private function Init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        stage3D = stage.stage3Ds[0];
                        stage3D.addEventListener(Event.CONTEXT3D_CREATE, OnContextCreate);
                        stage3D.requestContext3D();
                }
                //конструктор сцены параметр xml
                public function Scene (_xml:XML) {
                        myxml = _xml;
                        addEventListener(Event.ADDED_TO_STAGE, Init);
                }

Хочется чтобы из класс Main (смотри выше ) были удалены следующие строки
Код AS3:

var file:ByteArray = ((new EmbedModel()) as ByteArray);
                        var str:String = file.readUTFBytes( file.length );
                        var xml:XML = new XML( str );

И вставлены в класс Scene.
А в Main выполнялось следующее:
Код AS3:

 [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class; 
        private var sc:Scene;
                public function Main()
                {
                        sc = new Scene(new EmbedModel());
                        stage.addChild(sc);

2 Dimarik.
Я как перечитал сразу исправил.Я стараюсь использовать пунктуацию.
Я не собирался кого-либо поражать.

Сейчас собственно и пробую. В классе Scene находятся все объекты,также этот класс отвечает за визуализацию.Есть класс scenecontroller.


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

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