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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.03.2012, 08:08
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 1  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
По умолчанию Выполнение функции не происходит!

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

Вот функция иницализации игры:
Код 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". В чем может быть причина такого странного поведения?
__________________
Надо сменить подпись...

Старый 22.03.2012, 10:53
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Для начала я бы вытащил initPanel() наружу, туда же, где основной код, переписав ее немного. Ну и вызов бы пришлось иначе делать.
__________________
Идите первым!

Старый 22.03.2012, 11:31
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 3  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Область видимости функции. Вероятно она у вас не на _root.
Попробуйте trace( panel1.initPanel )
Если не будет вам [object function] , значит вы ее не там ищете.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 22.03.2012, 17:30
EndoCrinologist вне форума Посмотреть профиль Отправить личное сообщение для EndoCrinologist Найти все сообщения от EndoCrinologist
  № 4  
Ответить с цитированием
EndoCrinologist
 
Аватар для EndoCrinologist

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
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".. Это уже ну очень странно....................
__________________
Надо сменить подпись...


Последний раз редактировалось EndoCrinologist; 22.03.2012 в 17:45.
Старый 22.03.2012, 17:44
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Они не успевают проинициализироваться, первым выполняется код на _root.
Попробуй в старой версии

Код AS1/AS2:
setTimeout(testIt, 300);
 
function  testIt () 
{
	trace(panel1.initPanel); //[type Function]
 
}
И все будет ок.
__________________
Идите первым!

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

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
Хм.... Это очень и очень странно, но заработало... А можете немного конкретнее причину объяснить?
__________________
Надо сменить подпись...

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Можно initGame() в обработчик onLoad засунуть:
Код AS1/AS2:
function onLoad():Void
{
    initGame();
}

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

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

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


 


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


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