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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.12.2008, 18:28
root.Unknown вне форума Посмотреть профиль Отправить личное сообщение для root.Unknown Найти все сообщения от root.Unknown
  № 1  
Ответить с цитированием
root.Unknown

Регистрация: Dec 2008
Сообщений: 20
По умолчанию Прелоадер перепрыгивает на 2-й кадр не загрузивши остальные

У меня прелоадер почему-то перепрыгивает на 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 кадра...

В общем вот исходник:
Вложения
Тип файла: rar Preloader.rar (292.6 Кб, 117 просмотров)

Старый 27.12.2008, 18:37
Thanx7 вне форума Посмотреть профиль Отправить личное сообщение для Thanx7 Найти все сообщения от Thanx7
  № 2  
Ответить с цитированием
Thanx7

Регистрация: Nov 2007
Сообщений: 84
А зачем делать прелоадер в нескольких кадрах, когда кадры в AS3 чем меньше трогать - тем лучше?

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

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

Добавлено через 1 минуту
Код AS3:
l.load(new URLRequest("***.swf"));

Старый 27.12.2008, 18:50
root.Unknown вне форума Посмотреть профиль Отправить личное сообщение для root.Unknown Найти все сообщения от root.Unknown
  № 3  
Ответить с цитированием
root.Unknown

Регистрация: Dec 2008
Сообщений: 20
Нужно именно так, чтобы 1-й кадр прелоадер, 2-й кадр кнопка "Играть/Start", 3-й кадр всё остальное...

Старый 27.12.2008, 20:59
Thanx7 вне форума Посмотреть профиль Отправить личное сообщение для Thanx7 Найти все сообщения от Thanx7
  № 4  
Ответить с цитированием
Thanx7

Регистрация: Nov 2007
Сообщений: 84
Цитата:
Сообщение от root.Unknown Посмотреть сообщение
... 2-й кадр кнопка "Играть/Start" ...
Понятно. Действительно, вариант, предложенный kackbip, хороший.

Старый 27.12.2008, 19:18
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 5  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Подделал ваши исходники. В комментариях некоторые советы. Удачи.
Preloader.rar

Старый 27.12.2008, 19:40
root.Unknown вне форума Посмотреть профиль Отправить личное сообщение для root.Unknown Найти все сообщения от root.Unknown
  № 6  
Ответить с цитированием
root.Unknown

Регистрация: Dec 2008
Сообщений: 20
Цитата:
Сообщение от kackbip Посмотреть сообщение
Подделал ваши исходники. В комментариях некоторые советы. Удачи.
Вложение 21174
Спасибки...
visible=false and true логично, я и забыл про них, не самый лучший способ конечно, но все равно огромное спасибо
Я читал тему создание аркадной игры с 0... там прелоадер вообще кучу ошибок выдал, пока исправлял...... в общем тот прелоадер писался в 8 флеше и чуть не подходит для 9-ки...
респект ...

Старый 28.12.2008, 18:32
root.Unknown вне форума Посмотреть профиль Отправить личное сообщение для root.Unknown Найти все сообщения от root.Unknown
  № 7  
Ответить с цитированием
root.Unknown

Регистрация: Dec 2008
Сообщений: 20
Цитата:
Сообщение от kackbip Посмотреть сообщение
Подделал ваши исходники. В комментариях некоторые советы. Удачи.
Вложение 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: ))))


Последний раз редактировалось root.Unknown; 28.12.2008 в 21:20.
Старый 29.12.2008, 00:18
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 8  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
>>А нет... дело не в 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

Старый 29.12.2008, 01:51
root.Unknown вне форума Посмотреть профиль Отправить личное сообщение для root.Unknown Найти все сообщения от root.Unknown
  № 9  
Ответить с цитированием
root.Unknown

Регистрация: Dec 2008
Сообщений: 20
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-й день по ходу дела...

Старый 29.12.2008, 11:24
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 10  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Давайте уже ваши исходники. Подскажу на конкретном примере.

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

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

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


 


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


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