Форум 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=176995)

EndoCrinologist 22.03.2012 08:08

Выполнение функции не происходит!
 
Как всегда. Начинаешь над чем-нибудь работать и тут же возникают проблемы на самом начальном и простом этапе работы. Суть проблемы вот в чем.

Вот функция иницализации игры:
Код AS1/AS2:

function initGame(){
        fscommand("showmenu","false"); // Убираем верхнюю панель
        Stage.showMenu = false; // Убираем контекстное меню
        panel_count = 1; // количество панелей
        // Убираем все панели со сцены
        for (i=1; i<=panel_count; i++){
                eval("panel"+i)._visible = 0;
        }
        // Инициируем панель сети
        panel1.initPanel();
}
initGame();

panel1 - это мувик, который находится на сцене. Его инстанс указан "panel1". При проверке данной панели на трейсе, он выдает мне:
Цитата:

_level0.panel1
То есть, панель с таким именем существует. Вот функция в самой panel1, которая её будет отображать на сцене:
Код AS1/AS2:

function initPanel(){
        _root.actPanel(1); // Отображение панели на экране
        constat.text = "Не соединено!";
        // Инициируем кнопки
        butConn.onPress = connect; // Кнопка соединения
        butBegAuth.onPress = begAuth; // Кнопка аутентификации
}

Функция actPanel, отвечающая за отображение панели на сцене:
Код AS1/AS2:

function actPanel(p:Number){
        trace("__");
        for (i=1; i<=panel_count; i++){
                eval("panel"+i)._visible = 0;
        }
        eval("panel"+p)._visible = 1;
}

То есть, этой функции передается номер панели, которую нужно отобразить.

А вот и сама проблема. Дело в том, что при попытке вызова panel1.initPanel();, то вызова как раз и не происходит. То есть панель не инициируется. При трейсе "panel1.initPanel()" результат возвращает "undefined". В чем может быть причина такого странного поведения?

mooncar 22.03.2012 10:53

Для начала я бы вытащил initPanel() наружу, туда же, где основной код, переписав ее немного. Ну и вызов бы пришлось иначе делать.

dark256 22.03.2012 11:31

Область видимости функции. Вероятно она у вас не на _root.
Попробуйте trace( panel1.initPanel )
Если не будет вам [object function] , значит вы ее не там ищете.

EndoCrinologist 22.03.2012 17:30

1) panel1 вытащена на основную сцену (Instance Name = "panel1").
2) Функция initPanel() прописана в первом кадре мувика panel1.
3) trace(panel1) выдает мне _level0.panel1.
4) trace(panel1.initPanel) выдает undefined.
Могу сюда выставить исходник и Вы сами проверите работу.
Цитата:

Flash 8, AS2, http://upwap.ru/2110921
Формат *.doc переименуйте в формат *.fla
Добавлено через 10 минут
В общем, я заметил, что мувики на сцене есть, через трейс к ним доступ есть, но доступа к функциям внутри этих мувиков - нет... Вот так вот...
P.S. Создал новый документ. Поставил на сцену мивук и инстансом "ma", открыл, прописал в его первый кадр
Код AS1/AS2:

function fa(){
        trace ("its ok - fa");
}

Затем на основной сцене прописал
Код AS1/AS2:

function fb(){
        trace ("its ok - fb");
        ma.fa();
}
fb();

Трейс выдает мне только "its ok - fb".. Это уже ну очень странно....................

mooncar 22.03.2012 17:44

Они не успевают проинициализироваться, первым выполняется код на _root.
Попробуй в старой версии

Код AS1/AS2:

setTimeout(testIt, 300);
 
function  testIt ()
{
        trace(panel1.initPanel); //[type Function]
 
}

И все будет ок.

EndoCrinologist 22.03.2012 18:02

Хм.... Это очень и очень странно, но заработало... А можете немного конкретнее причину объяснить?

udaaff 22.03.2012 18:31

Можно initGame() в обработчик onLoad засунуть:
Код AS1/AS2:

function onLoad():Void
{
    initGame();
}



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

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