Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Помогите разобраться в классах (http://www.flasher.ru/forum/showthread.php?t=147815)

dark256 14.12.2010 18:16

Помогите разобраться в классах
 
В ООП я полный чайник, по мере сил пытаюсь разобраться, но выходит плохо. Каких-то винтиков видмо не хватает у меня в сером процессоре. Всвязи с чем вопрос - что это такое происходит?

Итак п.1. пишем класс с ОДНОЙ функцией.

Код AS1/AS2:

class serv 
{
        static function HEL1()       
        {
                trace("Hello World")
        }
}

Создаю ONE.SWF.
Код внутри:
Код AS1/AS2:

serv.HEL1()

Создаю TWO.SWF.

Код внутри тот же самый.

Далее MAIN.SWF грузит в себя через МКЛ сначала ONE.SWF, потом , по окончании загрузки, TWO.SWF.

По окончании каждой загрузки получаю свои хэлловорлды:
Hello World
Hello World

Далее ввожу в класс еще одну функцию:

Код AS1/AS2:

class serv 
{
        static function HEL1()       
        {
                trace("Hello World")
        }
 
        static function HEL2()       
        {
                trace("Hello iNils")
        }       
}

Модифицирую содержимое TWO.SWF:
Код AS1/AS2:

serv.HEL2()

Заливаю НОВЫЙ перекомпиленный TWO.SWF на сервер и после запуска получаю:

Hello World
undefined

Если теперь перекомпилить и перезалить ONE.SWF, то все нормально:

Hello World
Hello iNils

Что при этом получается?
Первая загруженная и запущенная СВФ где-то регистрирует класс SERV и после этого все, что загружено после - работает только с методами этого первого класса? Но ведь локально сама по себе каждая свф-ка нормально отрабатывает все методы класса! Они же в нее вкомпилены?
Как подгруженный клип может изначально блочить данное имя, инстанс или что это такое для всех последующих клипов, в которых так и так этот метод уже вкомпилен?

То есть я эту багу нашел, но теперь при добавлении новых функций - мне приходитя перекомпиливать и перезаливать ВСЕ свф-ки, работающие с методом класса SERV.

Это как-то можно вылечить, или что ж я не так делаю? :)

А ну и естсесвнно что локально на компе - все рабоатет. Удаленно - нет. Сандбокс молчит.

etc 14.12.2010 23:42

Классы в подгруженных swf инициализируются только в том случае, если их нет у загружающего swf.

Psycho Tiger 14.12.2010 23:48

Цитата:

Сообщение от etc (Сообщение 957341)
Классы в подгруженных swf инициализируются только в том случае, если их нет у загружающего swf.

Речь идёт об одном домене, я полагаю?

UPD: ах, это AS2. Прошу прощения)

etc 14.12.2010 23:51

Цитата:

Сообщение от Psycho Tiger (Сообщение 957348)
Речь идёт об одном домене, я полагаю?

UPD: ах, это AS2. Прошу прощения)

Об AS2, да.

dark256 15.12.2010 03:48

Ага. Так, тема пошла. Думал уж никто не ответит.
1. Домены разные:
MAIN Вконтакте
ONE и TWO на моем сервере.

Цитата:

Классы в подгруженных swf инициализируются только в том случае, если их нет у загружающего swf.
2. Майн ЮЗАЕТ класс SERV, НО перекомпиляция и перезаливка MAIN - не помогает. Метод "не появляется".

Приходится перекомпилять именно ВСЕ, что юзает SERV и идет при этом ДО TWO.

А эксперименты с бубном и всякими super global __proto__ public синглтонами и иже с ними - пробовать даже безполезно?
Просто хочется хотя бы понять о чем читать в мануале. Чтобы разобраться...
Пока на наводящее на правильные мысли ключевое слово в ваших комментах не наткнулся :(
Присоветуйте хотя бы какой раздел ООП читать.

etc 15.12.2010 12:31

Перед загрузкой другого swf надо делать delete _global.serv;

dark256 15.12.2010 14:12

Идея понравилась! Попробовал. Тогда MAIN.SWF теряет доступ к методам класса и после подгрузки первой же SWF-ки более ничего не работает.
А переопределить методы существующего класса, или, точнее дополнить как-то - можно?
Ну не знаю я ничего толком про это все :)

etc 15.12.2010 14:16

Дополнить нельзя, только убить и создать через подгрузку другого SWF заново.

dark256 15.12.2010 14:23

Мммм.... ну допустим у меня в MAIN лежит код:
Код:

my_btn.onRelease = function(){ serv.HEL1()}
Он работать после убиения и подгрузки новой СВФ перестает.
Сама подгруженная СВФ работает качественно, действительно с новым своим классом.
Может надо еще что-то вроде написать _global.serv = this.serv?

etc 15.12.2010 14:26

После подгрузки работоспособность должна восстановиться.


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

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