|
|
|||||
Регистрация: Nov 2010
Сообщений: 434
|
Правильно ли я сделал прелоадер
Есть приложение в нём несколько классов включая класс preloader и startApp(запустить приложение)
в классе preloader добавляю слушатели loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); private function progress(e: ProgressEvent): void { //---------------------------------------------------------------------- if (e.bytesLoaded == e.bytesTotal) { appLoaded = true; startApp(); loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError); } //---------------------------------------------------------------------- } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Нет.
что такое startApp(); ? Из Вашего текста явствует, что класс? Класс это не действие, класс это существительное. А здесь я вижу вызов какой-то функции.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2010
Сообщений: 434
|
ну и как же быть ? делать прелоадер в отдельном swf или можно всё в одном swf уместить и прелоадер и само приложение ?
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Конечно можно. На FlashDevelop переходить не собираетесь? Там есть шаблон проекта с прелоадером. Если поискать, на этом форуме его не раз выкладывали и обсуждали.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2010
Сообщений: 434
|
так он родимый и есть)
|
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Цитата:
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) |
|
|||||
Регистрация: Nov 2010
Сообщений: 434
|
package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.utils.getDefinitionByName; /** * ... * @author */ public class PreloaderClass extends MovieClip { public function PreloaderClass() { //---------------------------------------------------------------------- if (stage) { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; } //---------------------------------------------------------------------- addEventListener(Event.ENTER_FRAME, checkFrame); loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); //---------------------------------------------------------------------- // TODO show loader //---------------------------------------------------------------------- } private function ioError(e: IOErrorEvent): void { //---------------------------------------------------------------------- trace(e.text); //---------------------------------------------------------------------- } private function progress(e: ProgressEvent): void { //---------------------------------------------------------------------- // TODO update loader //---------------------------------------------------------------------- } private function checkFrame(e: Event): void { //---------------------------------------------------------------------- if (currentFrame == totalFrames) { stop(); loadingFinished(); } //---------------------------------------------------------------------- } private function loadingFinished(): void { //---------------------------------------------------------------------- removeEventListener(Event.ENTER_FRAME, checkFrame); loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError); //---------------------------------------------------------------------- // TODO hide loader //---------------------------------------------------------------------- startUP(); //---------------------------------------------------------------------- } private function startUP(): void { //---------------------------------------------------------------------- var mainClass: Class = getDefinitionByName("MainClass") as Class; addChild(new mainClass() as MovieClip); //---------------------------------------------------------------------- } } } package app { import flash.display.Sprite; import flash.events.Event; import flash.display.Loader; import flash.events.MouseEvent; import flash.utils.ByteArray; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.text.TextField; /** * ... * @author */ public class cPreloader extends Sprite { public var appLoaded: Boolean = false; public function cPreloader() { //---------------------------------------------------------------------- if (stage) Initialization() else addEventListener(Event.ADDED_TO_STAGE, Initialization); //---------------------------------------------------------------------- } private function Initialization(e: Event = null): void { //---------------------------------------------------------------------- loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); removeEventListener(Event.ADDED_TO_STAGE, Initialization); //---------------------------------------------------------------------- } private function progress(e: ProgressEvent): void { //---------------------------------------------------------------------- if (e.bytesLoaded == e.bytesTotal) { appLoaded = true; parentInstance.startApp(); loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError); } //---------------------------------------------------------------------- } private function ioError(e: IOErrorEvent): void { //---------------------------------------------------------------------- //errorText.text = String(e); //---------------------------------------------------------------------- } } } Последний раз редактировалось ЗлОй ПрОграММер; 03.11.2011 в 22:00. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Каких Вы хотите ответов, если не отвечаете на вопросы? Я спросил Вас, что такое startApp()? Вместо ответа Вы добавили загадок - теперь у Вас есть parentInstance.startApp(); Причем что такое parentInstance, знаете только Вы, ибо такой переменной в коде класса нет. Как ответить Вам, чем Ваш код отличается от шаблона ФД? Методом дедукции (исключения) я могу заключить, что "отцовскийЭкземпляр" как-то связан с главным классом самого приложения (потому как больше этому классу в вашем коде прятаться негде). Поскольку переменной нет, видимо это класс, хоть и написан с маленькой буквы. В импорте он отсутствует, видимо по причине того что лежит в той же директории/находится в том же пакете. Если я прав, то отличие именно в этом. В прелоадере от ФД главный класс НИКАК не импортируется в класс прелоадера. Потому что в этом случае он притянет за собой ВЕСЬ остальной код и соотв. все используемые в swf-файле ресурсы. И прелоадер не будет добавлен на сцену, пока не загрузится ВСЯ флэшка. А после этого, как ВЫ понимаете, прелоадер никому уже не нужен. Должен прогрузиться первый кадр с прелоадером, все что нужно для показа этого кадра. Когда кадр прогрузится, плеер отобразит его и начнет грузить второй кадр, в котором как раз и находятся все классы и ресурсы приложения. В это время прелоадер уже "на сцене" и показывает прогресс загрузки. Видите разницу? Два кадра и разделение ресурсов по кадрам – вот чего нет у Вас, чтобы прелоадер стал ПРЕлоадером.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2010
Сообщений: 434
|
startApp(запустить приложение). добавляет на сцену фон приложения ну и т.д.
а насчёт структуры 1. Есть главный экземпляр класса который создаёт 2 экземпляра классов (preloader и app) первый это прелоадер, а второй экземпляр приложения. и когда в прелоадере e.bytesLoaded == e.bytesTotal я через главный класс добавляю экземпляр класса app Последний раз редактировалось ЗлОй ПрОграММер; 04.11.2011 в 00:53. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Ага, вся флэшка в одном кадре явно.
Смотрите, как работает встроенный предзагрузчик: Если у главного таймлайна более одного кадра, то плеер, когда загрузит первый кадр, начинает выполнять то, что в нём есть. Потому этот кадр используют для предзагрузчика. Который не покажется, пока не загрузится всё, что есть в первом кадре. Который ждёт, пока не загрузится всё и показывает всякое. Чтобы было более одного кадра "AS3 Project with Preloader" использует метатег [Frame] в классе MainClass. И чтобы в первом кадре не было этого MainClass, фона приложения и т.д. - используют getDefinitionByName. Потому что как только в каком-то кадре будет упомянуто имя класса не как строка (в getDefinitionByName) - то этот класс будет вкомпилен в этот кадр. Также будут вкомпилены все классы, которые упоминаются в этом классе не как строка и классы, которые упоминаются в тех классах итд.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
Часовой пояс GMT +4, время: 20:30. |
|
« Предыдущая тема | Следующая тема » |
|
|