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

KiL33 08.05.2009 07:55

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

Класс, который подключается к мувику
Код 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, а нужно вызывать функцию, когда кнопка расположена на главной сцене.

silin 08.05.2009 10:55

>>а нужно вызывать функцию, когда кнопка расположена на главной сцене.
start_f() должна быть определена в this._parent, т.е. на главной сцене в этом случае
либо вызывать ее надо не как this._parent.start_f(), а как ссылкаНаЭкземплярPicture_loading.start_f()

KiL33 08.05.2009 12:06

Я только начал изучать особенности написания скрипта в классах и не совсем понимаю, что есть ссылкаНаЭкземпляр?

Добавлено через 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()
С этим так и не разобрался

silin 08.05.2009 12:33

>>и не совсем понимаю, что есть ссылкаНаЭкземпляр

затруднительно в этом случае что-то объяснить, хотя все и предельно просто на самом деле:
ссылкаНаЭкземпляр - это буквально ссылка на экземпляр
метод (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();//при нажатии пытаюсь вызвать функцию
        }
}

повторюсь, что это скорее костыли для иллюстрации, чем нормальные решения
не берусь предугадать каких именно, но граблей на таком пути будет не мало, мужайся..:)

KiL33 08.05.2009 19:50

Спасибо за советы.
Цитата:

граблей на таком пути будет не мало, мужайся..
Буду стараться:)


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

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