Просмотр полной версии : Вызов функции из соседнего класса
Мувику подключаю класс, но при нажатии на кнопку, которая расположена на главной сцене, функция не хочет срабатывать.
Класс, который подключается к мувику
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");
}
}
Класс для действия кнопки
class Btn_class extends MovieClip {
public function init() {
onRelease = release;
}
private function release() {
this._parent.start_f();//при нажатии пытаюсь вызвать функцию
}
}
Функция start_f вызывается только в том случае если кнопка расположена непосредственно в том мувике к которому подключен класс Picture_loading, а нужно вызывать функцию, когда кнопка расположена на главной сцене.
>>а нужно вызывать функцию, когда кнопка расположена на главной сцене.
start_f() должна быть определена в this._parent, т.е. на главной сцене в этом случае
либо вызывать ее надо не как this._parent.start_f(), а как ссылкаНаЭкземплярPicture_loading.start_f()
Я только начал изучать особенности написания скрипта в классах и не совсем понимаю, что есть ссылкаНаЭкземпляр?
Добавлено через 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()
С этим так и не разобрался
>>и не совсем понимаю, что есть ссылкаНаЭкземпляр
затруднительно в этом случае что-то объяснить, хотя все и предельно просто на самом деле:
ссылкаНаЭкземпляр - это буквально ссылка на экземпляр
метод (start_f, например) можно вызвать у того, у кого он есть..
в твоем примере он есть у всех экземпляров Picture_loading
т.е. и вызов должен выглядеть как (мувик класса Picture_loading).start_f()
с другой стороны start_f может быть и не только у экземпляров Picture_loading, можно определить его просто в кадре какого-то мувика, того же _root' а, например, тогда и _root.start_f() тоже будет работоспособным..
должен предупредить, что писать такое ( обращение к _root, _parent и т.п.) в классах - полный абсурд, даже при том что будет работать работать заставишь
Upd.
про ссылку: можно передавать ее, например, в init этого Btn_class
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();//при нажатии пытаюсь вызвать функцию
}
}
повторюсь, что это скорее костыли для иллюстрации, чем нормальные решения
не берусь предугадать каких именно, но граблей на таком пути будет не мало, мужайся..:)
Спасибо за советы.
граблей на таком пути будет не мало, мужайся..
Буду стараться:)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.