365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 401
1
AS 3.0

Создание прелоадера для приложения вконтакте

05.07.2012, 14:30. Показов 2717. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь счас придумать, как написать прелоадер к своему пиложению. В связи с этим возникли такие проблеммы:
Если я выношу прелоадер в отдельный swf файл, сразу появляются проблеммы с API вконтакте, т.к. там есть строчка:
ActionScript 3
1
flashVars = stage.loaderInfo.parameters as Object;
которая работает только если вызывается со сцены... как только моя программа оказывается Child-ом или если эта строчка находится внутри любого объекта, за исключением Document Class,
при выполнении появляется ошибка:

ActionScript 3
1
2
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
    at MainV2_fla::MainTimeline/frame1()
т.е. получается что мне надо либо передать её из прелоадера в своё приложение (передать объект из 1 swf во второй, причём без всяких посредников), либо если я подключаю класс для взаимодействие с API вконтакта прямо в прелоадере, то надо как-то наладить его взаимодействие с остальными классами, используемыми в основной программе. (по сути API вконтакта у меня счас только получает данные о пользователе и пишет/читает 3 переменные хранящиеся на сервере, данные этих 3-х переменных и используют остальные мои классы),
ещё вариант, заставить эту строчку работать адекватно из под Child-а... Но с этим у меня пока тоже проблеммы, т.к. parent почему-то не помог

Есть другой вариант, который мне хотелось бы реализовать гораздо сильнее, но я счас очень смутно представляю как это сделать. Дело в том, что 95% веса моего приложения это MovieClip классы, хранящиеся в библиотеке, экземпляры которых я буду динамически создавать во время работы приложения. Если бы вынести эту библиотеку в отдельный swf файл, а потом подгружать её в основную программу, то было бы просто прекрасно... Однако я незнаю как сделать это таким образом, чтобы в последствии можно было обратиться к классам этой библиотеки по имени, для создания экземпляра?


З.Ы. вариант с созданием прелоадера в первом кадре или первой сцене я пока не рассматриваю, т.к. он нарушит мне всю предполагаемую структуру приложения, да и выглядеть будет код очень криво
(ещёя кстати не уверен, в какой момент флеш подгружает библиотеку, до проигрывания первого кадра или после?)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2012, 14:30
Ответы с готовыми решениями:

Создание внешнего прелоадера для загрузки нескольких swf использующих API VK
День добрый. Проект разбит на несколько swf фалов, в каждом из них используется API VK. При...

Приложения ВКонтакте
Хотелось бы подробно узнать о приложениях вконтакте. Какие особенности? Где хранятся сведения о...

Взаимодействие приложения на AS с API ВКонтакте
Здравствуйте! Можете понятным языком рассказать, как подключить API ВКонтакте к своему...

Создание бота для приложения вконтакте ''Poker Shark"
Здравствуйте, хочу написать бота для приложения вконтакте ''Poker Shark". Не для того чтоб бот...

9
Модератор
2898 / 1756 / 179
Регистрация: 19.02.2011
Сообщений: 6,456
05.07.2012, 15:36 2
Событие ADDED_TO_STAGE отправляется тогда, когда объект добавляется на сцену, при этом у объекта свойству stage присваивается в качестве значения ссылка на Stage вместо null.

Цитата Сообщение от Varlock Посмотреть сообщение
Если бы вынести эту библиотеку в отдельный swf файл
Нет смысла грузить один единственный swf. Если бы их было N-е кол-во и грузились они только по мере необходимости - другое дело. Но это отдельный разговор.
1
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 401
05.07.2012, 16:51  [ТС] 3
теперь ясно почему оно не работало в child-ах и классах, но проблемму я пока не понял как решить, ведь я так понял, что ADDED_TO_STAGE диспатчит сам объект в момент добавления на сцену, а данные мне надо получить внутри самого объекта, т.е. в самом примитивном виде прелоадер выглядит у меня так:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import flash.display.Loader;
import flash.events.Event;
 
var loader : Loader = new Loader ();
 
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener (ProgressEvent.PROGRESS, onProgress);
 
loader.load(new URLRequest ("MainV2.0.swf")); // собственно MainV2.0.swf это само приложение.
 
function onComplete(e: Event) : void 
{
    removeChild(bar); // bar это мувиклип в виде прямоугольника, чтобы не на пустой экран любоваться
    addChild(loader);
}
 
 
function onProgress(e: ProgressEvent) : void 
{
    bar.scaleX = (e.target.bytesLoaded/e.target.bytesTotal); // меняем масштаб по Х у bar от 0 до 1.
}
С ADDED_TO_STAGE, он будет выглядеть я так понимаю вот так:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import flash.display.Loader;
import flash.events.Event;
 
var loader : Loader = new Loader ();
 
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener (ProgressEvent.PROGRESS, onProgress);
 
loader.addEventListener(Event.ADDED_TO_STAGE, onAdded); // неуверен нужно ли тут contentLoaderInfo, по моему нет т.к. добавляем на сцену мы уже сам лоадер.
 
loader.load(new URLRequest ("MainV2.0.swf")); // собственно MainV2.0.swf это само приложение.
 
function onComplete(e: Event) : void 
{
    removeChild(bar); // bar это мувиклип в виде прямоугольника, чтобы не на пустой экран любоваться
    addChild(loader);
}
 
 
function onProgress(e: ProgressEvent) : void 
{
    bar.scaleX = (e.target.bytesLoaded/e.target.bytesTotal); // меняем масштаб по Х у bar от 0 до 1.
}
 
function onAdded(e: Event) : void 
{
    //и вот тут я незнаю что написать
}
как мне передать в мой swf файл, что он был успешно добавлен на сцену и толко теперь пора обращаться к stage.loaderInfo.parameters ?
или как мне передать сами stage.loaderInfo.parameters в мой загруженный файл, чтобы он смог принять их и обработать?
или я неправильно понял, кем и куда диспатчится ADDED_TO_STAGE?
0
Модератор
2898 / 1756 / 179
Регистрация: 19.02.2011
Сообщений: 6,456
05.07.2012, 17:40 4
Писать в классах и подписаться на вышеуказанное событие в конструкторе. Прочая инициализация в обработчике и дальше по цепочке логических событий.
0
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 401
05.07.2012, 17:51  [ТС] 5
что-то туплю, никак не соображу что ты предлагаешь
можешь пояснить как-нибудь ещё?
обработчик ADDED_TO_STAGE в прелоадере или в MainV2.0.swf?
0
Модератор
2898 / 1756 / 179
Регистрация: 19.02.2011
Сообщений: 6,456
05.07.2012, 18:30 6
Varlock, посмотри тут
0
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 401
05.07.2012, 21:04  [ТС] 7
урок интересный, спасибо жаль, не законченный...
счас пробую поставить FlashDevelop, посмотрю с чем его едят...

правда из прочитанного у меня выходит, что в итоге прелоадер и само приложение окажутся в одном swf файле, в первом и 2-ом кадре? тогда в принцыпе понятно... хотя средствами самого флеша мне ненравится как это выглядит.. может FlashDevelop поможет в этом...
0
Модератор
2898 / 1756 / 179
Регистрация: 19.02.2011
Сообщений: 6,456
05.07.2012, 21:20 8
Varlock, да, там описан стандартный внутренний прелоадер. Если речь об обмене данными с другими swf - мне это не мешало. Если все же найдутся какие-то причины его не использовать - никто не мешает написать свой.
В чем необходимость не использовать 2 кадра?
0
365 / 68 / 2
Регистрация: 25.09.2008
Сообщений: 401
05.07.2012, 22:15  [ТС] 9
необходимости особой, если задуматься нет, просто внутри FlashCS5 то выглядит на мой взгляд не особо красиво когда и прелоадер и контент на одной линейке времени и нельзя их по отдельности скомпилировать...
если реализовать всё это классами, в FlashDevelop-ере, то наверно будет хорошо и так мне по крайней мере пока нравится как в нём проект выглядит

я правда ещё не смотрел, как там работать с swc файлами, в которые мне придётся всю графическую часть переносить...
там есть какие-то отличия от fla файла?
или можно просто
ActionScript 3
1
import myFile.swc;
и сразу обращаться к классам, которые находились в библиотеке fla файла из которого он был скомпилирован?
или он сам компилируется как класс, а находящиеся в библиотеке классы, как его методы?

вобще счас вопросов пока возникает ещё больше чем было но для начала надо чучуть поэксперементировать с переносом того, что уже есть... а там часть вопросов я думаю сама отпадёт из насущных счас только как к классам внутри swc файла обращаться
0
Модератор
2898 / 1756 / 179
Регистрация: 19.02.2011
Сообщений: 6,456
05.07.2012, 22:22 10
Нет, swc не импортируются (как и в ИДЕ). Правой кнопкой по swc и add to libary
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2012, 22:22
Помогаю со студенческими работами здесь

Приложения для ВКонтакте на Windows
Есть приложение, чтобы можно было читать и отвечать на сообщения с вк не заходя на сайт?

Бот для приложения вконтакте
Я хочу написать бота для приложения вконтакте . Схема такова с edit 1 и edit2 посылает id юзера и...

Выбор типа приложения для работы с ВКонтакте
Раотаю в Microsoft Visual Studio 2015 Здравствуйте, пытаюсь начать писать программу для вк....

Поиск художника для создания приложения Вконтакте
Может это не совсем та площадка, куда требуется писать по данному поводу, но другой, на данном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru