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

TbIKBA 05.03.2007 19:31

Композиция
 
Сталкиваюсь с такой бедой уже несколько раз, надоело - хочу разобраться!
Есть Класс которий аттачит МС в котором кнопке ( на самом деле мувику) нужно присвоить онРоллОвер и прочие онПресс, чтоб по ним вызывалась функция из этого же класса. вот тут и беда. как дать бедной кнопке понять что нужно функцию вызывать из класса а не искать толко в "себе". Делать класс статичным тоже не очень хороший выход. Как кто реализует такие доступы?

для примера:
Код:

class MyClass {
        private var container:MovieClip;
        public function MyClass(target:MovieClip) {
                container = target.attachMovie("mc", "mc", target.getNextHighestDepth());
                container.btn.onPress = function() {
                        update(); // вот это и не запускается :(
                };
        }
        public function update() {
                trace("UPDATE");
        }
}


iNils 05.03.2007 19:48

Используют класс Delegate

TbIKBA 05.03.2007 20:02

А если не сложно на можешь на моём примере показать? а то чтот я читаю и не вкуриваю совершенно как она работает.. :confused:

iNils 05.03.2007 20:06

Код:

import mx.utils.Delegate
class MyClass {
        private var container:MovieClip;
        public function MyClass(target:MovieClip) {
                container = target.attachMovie("mc", "mc", target.getNextHighestDepth());
                container.btn.onPress = Delegate.create (this, update);
        }
        public function update() {
                trace("UPDATE");
        }
}


Ariel 05.03.2007 22:36

Simplier
 
А что, по-простому уже не модно?
Код:

class MyClass {
        private var container:MovieClip;
        public function MyClass(target:MovieClip) {
                container = target.attachMovie("mc", "mc", target.getNextHighestDepth());
                container.btn.onPress = update;
        }
        private function update() {trace("UPDATE");}
}


iNils 05.03.2007 22:49

Цитата:

Сообщение от Ariel
А что, по-простому уже не модно?
Код:

class MyClass {
        private var container:MovieClip;
        public function MyClass(target:MovieClip) {
                container = target.attachMovie("mc", "mc", target.getNextHighestDepth());
                container.btn.onPress = update;
        }
        private function update() {trace("UPDATE");}
}


Области видимости разные

Ariel 05.03.2007 23:06

Better
 
Были разные. Теперь область видимости одна. Работает. А все потому что присутствовала порочная методика определения метода в методе...

etc 06.03.2007 01:04

Ariel, свой код нужно проверять перед публикацией. Он не рабочий. Трейс сработает, да. А вот trace(this) выведет совсем не то, что ожидалось. Области разные.

sem1313 06.03.2007 01:32

iNils, ты привел пример про область видимости функций, а как быть с областью видимости объектов, заданных в этом же классе?

iNils 06.03.2007 01:36

Если я верно понял вопрос, то я не использую классический Delegate, а использую свой в котором можно передавать аргументы (вообще есть и другие реализации). Если мне нужно, что бы внутри update я мог ссылать на объект который вызвал этот update, то я указываю его в качестве параметра. А писать как предложил Ariel в корне не верно.


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

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