Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прелоадер перепрыгивает на 2-й кадр не загрузивши остальные (http://www.flasher.ru/forum/showthread.php?t=119690)

root.Unknown 27.12.2008 18:28

Прелоадер перепрыгивает на 2-й кадр не загрузивши остальные
 
Вложений: 1
У меня прелоадер почему-то перепрыгивает на 2-й кадр, не загрузивши файлы с 3-го кадра... В общем компилю проект нажимаю в окне флеш проигрывателя по меню View > Simulate Download, видно как полоса добигает до 5-10% и потом тупо сразу перепрыгивает на 2-й кадр, где кнопка, нажимаю по кноке чтобы попасть в 3-й кадр где картинка, но при нажатии ничего не происходит, потому что файл до конца не загрузился и видно кстати как он дальше грузится, открыв Frame by Frame Graph... и только тогда когда до конца загрузится событие по кнопке осуществляется...
Подробное описание:
Выложу исходник ещё

Создал прелоадер .fl + внешний .as файл

Структура .fl файла:

Первый кадр, в нем создан MovieClip под названием preloader, так же я прописал в linkage для него класс main.preloader, в этом MovieClip-е ещё один MovieClip под названием progressbar и Instanse of: "progressbar" в котором красная полоска, которая с помощью AS кода растягивается во время загрузки файлов. В первом кадре на фрейме ничего не написано...

Второй кадр, в нем расположена кнопка под названием myButton с ID: "play_btn"
На 2-м фрейме записан код:
Код AS3:

stop();
play_btn.addEventListener(MouseEvent.CLICK, doPlay);
function doPlay(e:MouseEvent):void {
play();
}

По нажатию на эту кнопку мы попадаем в 3-й кадр, последний, в котором расположена картинка...

Как сделать чтобы полоска загрузки доходила до конца, а не пробежала 5% и перепрыгнула на 2-й кадр и там уже догружается...
Кстати если поставить 3-й кадр на второй, где кнопка находится, то полоса загружается до конца, если в .fl файле вообще только 2 кадра...

В общем вот исходник:

Thanx7 27.12.2008 18:37

А зачем делать прелоадер в нескольких кадрах, когда кадры в AS3 чем меньше трогать - тем лучше?

Может, сделайте загрузчик отдельным swf файлом, и Вашу программу - отдельным. Так Вы выигрываете в трёх пунктах:

1. Логика проще.
2. Меньше кода.
3. Не нужно трогать второй и третий кадры.

Добавлено через 1 минуту
Код AS3:

l.load(new URLRequest("***.swf"));


root.Unknown 27.12.2008 18:50

Нужно именно так, чтобы 1-й кадр прелоадер, 2-й кадр кнопка "Играть/Start", 3-й кадр всё остальное...

kackbip 27.12.2008 19:18

Вложений: 1
Подделал ваши исходники. В комментариях некоторые советы. Удачи.
Вложение 21174

root.Unknown 27.12.2008 19:40

Цитата:

Сообщение от kackbip (Сообщение 786823)
Подделал ваши исходники. В комментариях некоторые советы. Удачи.
Вложение 21174

Спасибки... :rolleyes:
visible=false and true логично, я и забыл про них, не самый лучший способ конечно, но все равно огромное спасибо :victory:
Я читал тему создание аркадной игры с 0... там прелоадер вообще кучу ошибок выдал, пока исправлял...... в общем тот прелоадер писался в 8 флеше и чуть не подходит для 9-ки...
респект ... :drinks:

Thanx7 27.12.2008 20:59

Цитата:

Сообщение от root.Unknown (Сообщение 786816)
... 2-й кадр кнопка "Играть/Start" ...

Понятно. Действительно, вариант, предложенный kackbip, хороший.

root.Unknown 28.12.2008 18:32

Цитата:

Сообщение от kackbip (Сообщение 786823)
Подделал ваши исходники. В комментариях некоторые советы. Удачи.
Вложение 21174

Не получается подключить этот прелоадер к .fla, точнее class "main.Main" ... :(
Дело в том что в .fla файле в строке там где надо прописать клас "Document Class" у меня уже есть путь к другому .as файлу и если я с файла main.Main вставляю код:

Код AS3:

public function Main(){
stop();//останавливаем Main Timeline. Флэшка переходит на следующий кадр по мере его подгрузки если не поставить стоп.
preloader.showPreloading(this);
preloader.addEventListener(Event.COMPLETE, _onLoad);
}
 
private function _onLoad(evt:Event):void{
preloader.removeEventListener(Event.COMPLETE, _onLoad);//нужно отписываться от событий сразу как только в них отпадает необходимость. Чтобы Gabage Collector удалял все объекты на которых нету внешних ссылок
play_btn.addEventListener(MouseEvent.CLICK, goAhead);
gotoAndStop(2);//вот тут то что надо отправляется на второй кадр... а то прелоадер отправлял :)))
}
 
private function goAhead(evt:MouseEvent):void{
play_btn.removeEventListener(MouseEvent.CLICK, goAhead);//не забываем отписываться - это важно
removeChild(play_btn);//удаляем со сцены и удаляем все внешние ссылки чтобы сборщик мусора мог освободить память. Серьезно нужно подойти к проблеме освобождения памяти - требование у серьезных работодателей есть по этому поводу.
gotoAndStop(3);//советую вместо конкретных кадров использовать метки... Если структура поменяется - не придется изменять номер кадра.
}

в мой файл mainScript.as то при компиляции выдает след. ошибки:
1180: Call to a possibly undefined method stop.
1180: Call to a possibly undefined method gotoAndStop.
1180: Call to a possibly undefined method gotoAndStop.
1180: Call to a possibly undefined method addFrameScript.
1180: Call to a possibly undefined method gotoAndStop.

Я предполагаю что ошибка из-за public class mainScript extends Sprite {
}

---> extends Sprite <---, так записано в моем классе и я в него вставляю код, а в другом .as файле, то есть на прелоадер "main.as" написано public class Main extends MovieClip {
}

В общем не знаю что делать...

Добавлено через 2 часа 22 минуты
А нет... дело не в public class Main extends Sprite {
}
Дело в том что stop();, gotoAndStop(2);, gotoAndStop(3); нельзя прописывать во внешнем .as файле, потому что компил. этого не понимает мне кажется, не знает что надо сделать стоп в кадре и т.д. :(
Я создал простую переменую private var pRe;
и дописал её к pRe.stop();, pRe.gotoAndStop(2) и т.д., в итоге 3 ошибки перестали выскакивать...
Но осталась одна: 1180: Call to a possibly undefined method addFrameScript.

Делаю двойной клик по строке с ошибкой, она меня отправляет на 1 строку, строка: package {

Как с этой ошибкой бороться?

Добавлено через 2 часа 43 минуты
Или переделайте пожалуйста кто-то этот прелоадер, который переделал kackbip, так чтобы строка Document Class была пустой, а то я чет ничего немогу придумать как обращаться к внешнему файлу main.Main :(, созда мувиклип на первом кадре и ему в linkage... прописал class: main.Main но ничего не вышло ((((
Короче говоря надо как-то сделать загрузку класса (внешнего main.Main.as файла ) не трогая строку Document Class: ))))

Alex Lexcuk 29.12.2008 00:18

>>А нет... дело не в public class Main extends Sprite {
}
Дело в том что stop();, gotoAndStop(2);, gotoAndStop(3); нельзя прописывать во внешнем .as файле,

Так надо написать public class Main extends MovieClip и все goto будут работать
http://www.dnadillo.dn.ua/fla/Preload-second-fram.html

root.Unknown 29.12.2008 01:51

Alex Lexcuk сделал так как ты сказал, посмотрел сслыку http://www.dnadillo.dn.ua/fla/Preload-second-fram.html ))) Все равно есть трабла...
Выбивает следующую ошибку в окне Output, не Compiler Error: TypeError: Error #1009: Cannot access a property or method of a null object reference.
at myScript$iinit()

TypeError: Ошибка #1009: Не может обращаться к свойству или методу недействительной объектной ссылки.
в myScript$iinit()

Вот что я понял:
В .fla файле в строке Document Class записан id: myScript
Структура самого myScript.as файла приведена ниже...
Заметьте что после public class >>>myScript<<< extends MovieClip { идет функция startLoader, а не myScript, эта функция (myScript) идет ниже, после startLoader.
В общем не знаю что делать... Как уже не крутил, как я только не переставлял этот код местами и т.д., постоянно новые и новые ошибки...

Код AS3:

package {
        import...
 
        public class myScript extends MovieClip {
        private var...
 
//==============================
public function startLoader() {
stop();
preloader.showPreloading(this);
preloader.addEventListener(Event.COMPLETE, _onLoad);
}
private function _onLoad(evt:Event):void {
preloader.removeEventListener(Event.COMPLETE, _onLoad);
play_btn.addEventListener(MouseEvent.CLICK, goAhead);
gotoAndStop(2);
}
private function goAhead(evt:MouseEvent):void {
play_btn.removeEventListener(MouseEvent.CLICK, goAhead);
removeChild(play_btn);
gotoAndStop(3);
}
//==============================
 
public function myScript() {
// Other Code
......................
}

Alex Lexcuk извени за мою наглость, ты итак мне много чем помог и так объязан тебе :),
но ты не мог бы переделать этот прелоадер так чтобы все осталось на своих местах, но строка в .FLA файле Document Class была пустой? Конечно если у тебя есть время...
В ту строку я хочу подключить другой файл - myScript.as ))) Он самый главный.
Просто мучусь с этим прелоадером уже 2-й день по ходу дела...

kackbip 29.12.2008 11:24

Давайте уже ваши исходники. Подскажу на конкретном примере.


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

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