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

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

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
По умолчанию Вызов функции из соседнего класса

Мувику подключаю класс, но при нажатии на кнопку, которая расположена на главной сцене, функция не хочет срабатывать.

Класс, который подключается к мувику
Код AS1/AS2:
class Picture_loading extends MovieClip {
 
	public function init() {
		_root.btn.__proto__ = Btn_class.prototype;//подключаю кнопке на сцене Btn_class
		_root.btn.init();//Вызываю функцию init в Btn_class
	}
	public function start_f() {//функция не срабатывает
		trace("start_f");
	}
}
Класс для действия кнопки
Код AS1/AS2:
class Btn_class extends MovieClip {
	public function init() {
		onRelease = release;
	}
	private function release() {
		this._parent.start_f();//при нажатии пытаюсь вызвать функцию
	}
}
Функция start_f вызывается только в том случае если кнопка расположена непосредственно в том мувике к которому подключен класс Picture_loading, а нужно вызывать функцию, когда кнопка расположена на главной сцене.

Старый 08.05.2009, 10:55
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>а нужно вызывать функцию, когда кнопка расположена на главной сцене.
start_f() должна быть определена в this._parent, т.е. на главной сцене в этом случае
либо вызывать ее надо не как this._parent.start_f(), а как ссылкаНаЭкземплярPicture_loading.start_f()

Старый 08.05.2009, 12:06
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 3  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Я только начал изучать особенности написания скрипта в классах и не совсем понимаю, что есть ссылкаНаЭкземпляр?

Добавлено через 19 минут
Цитата:
start_f() должна быть определена в this._parent
Сделал так, функция стала вызываться.
Код:
class Picture_loading extends MovieClip {

	public function init() {
		_root.btn.__proto__ = Btn_class.prototype		_root.btn.init();
		this._parent.start_f = start_f;
	}
	public function start_f() {//функция не срабатывает
		trace("start_f");
	}
}
Цитата:
либо вызывать ее надо не как this._parent.start_f(), а как ссылкаНаЭкземплярPicture_loading.start_f()
С этим так и не разобрался

Старый 08.05.2009, 12:33
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>и не совсем понимаю, что есть ссылкаНаЭкземпляр

затруднительно в этом случае что-то объяснить, хотя все и предельно просто на самом деле:
ссылкаНаЭкземпляр - это буквально ссылка на экземпляр
метод (start_f, например) можно вызвать у того, у кого он есть..
в твоем примере он есть у всех экземпляров Picture_loading
т.е. и вызов должен выглядеть как (мувик класса Picture_loading).start_f()

с другой стороны start_f может быть и не только у экземпляров Picture_loading, можно определить его просто в кадре какого-то мувика, того же _root' а, например, тогда и _root.start_f() тоже будет работоспособным..

должен предупредить, что писать такое ( обращение к _root, _parent и т.п.) в классах - полный абсурд, даже при том что будет работать работать заставишь

Upd.
про ссылку: можно передавать ее, например, в init этого Btn_class
Код AS1/AS2:
class Picture_loading extends MovieClip {
 
	public function init() {
		_root.btn.__proto__ = Btn_class.prototype;//подключаю кнопке на сцене Btn_class
		_root.btn.init(this);//Вызываю функцию init в Btn_class
	}
	public function start_f() {//функция не срабатывает
		trace("start_f");
	}
}
class Btn_class extends MovieClip 
{
	private var _owner:Picture_loading;
	public function init(owner:Picture_loading) {
		onRelease = release;
		_owner = owner;
	}
	private function release() {
		_owner.start_f();//при нажатии пытаюсь вызвать функцию
	}
}
повторюсь, что это скорее костыли для иллюстрации, чем нормальные решения
не берусь предугадать каких именно, но граблей на таком пути будет не мало, мужайся..


Последний раз редактировалось silin; 08.05.2009 в 12:56.
Старый 08.05.2009, 19:50
KiL33 вне форума Посмотреть профиль Отправить личное сообщение для KiL33 Найти все сообщения от KiL33
  № 5  
Ответить с цитированием
KiL33
 
Аватар для KiL33

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
Спасибо за советы.
Цитата:
граблей на таком пути будет не мало, мужайся..
Буду стараться

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

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

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


 


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


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