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

GFreemen 21.09.2007 17:39

Создать событие в классе
 
Добрый день, необходимо в AS2 классе создать событие и подписаться на него...
Код:

class work_area_class extends MovieClip {

        private var flag:Boolean=false;//флаг для проверки зажатия средней клавишы
       
        function work_area_class() {
               
                AsBroadcaster.initialize(this);
                this.onEnterFrame=function(){
                        if (Key.isDown(4)==true&&flag==false) {//если нажали В ПЕРВЫЙ РАЗ
                                flag=true;//флаг для того чтобы событие не гененрировалось
                                //постоянно, а только при первом нажатии
                                this.broadcastMessage("onMiddle");
                        }
                        if (Key.isDown(4)==false&&flag==true) {//если ОТЖАЛИ
                                flag=false;
                                this.broadcastMessage("offMiddle");
                        }
                }
                this.addListener(this);
                this.onMiddle=function(){
                        trace("нажата");
                }
                this.offMiddle=function(){
                        trace("ОТЖАТА");
                }
        }
}

На что флеш отвечает:
There is no method with the name 'addListener'.
this.addListener(this);
There is no property with the name 'onMiddle'.
this.onMiddle=function(){
There is no property with the name 'offMiddle'.
this.offMiddle=function(){

Помогите разобраться в чем ошибка?
(кроме как в ДНК)

etc 21.09.2007 19:02

Кто вас так классы научил называть?
Смотрите темы про EventDispatcher на форуме.

GFreemen 21.09.2007 21:37

Да, собственно, говоря никто не учил...
Так, с миру по нитке, и на основании своего собственного опыта.
В теле программы (или как это назвать, короче на 1 кадре) этот вариант работает...
А за такое я даже не слышал. Сейчас буду искать.
Кстати в хелпе на сам Флеш 8 ссылка на EventDispatcher отсутствует полностью... :(

etc 21.09.2007 21:39

Вы хоть один стандартный класс видели, чтобы так назывался?

Kikasso 21.09.2007 21:45

Код:

class WorkArea extends MovieClip {
public var broadcastMessage:Function;
//.....
}

Ну и еще кое-что надо дописать - то, что будет добавлено бродкастером / диспатчером. У вас и ругается - нет свойств и методов.
А сажать проверку на энтерфрейм.. мм..

GFreemen 21.09.2007 22:30

Всем спасибо.
1)Название класа не соответствует букве и духу ООП - но главное что бы работало. Для себя делаю - мне так понятнее.

2)Добавил
Код:

        public var addListener:Function;
        public var onMiddle:Function;
        public var offMiddle:Function;

И, о, чудо - все работает.

3)А чем не нравится проверка нажатия в onEnterFrame?

Mr. Fixit 22.09.2007 01:47

нагружает комп. Пользуйся событием object.onKeyDown.

udaaff 22.09.2007 02:14

Чтобы отловить событие нажатия колесика мыши, без onEnterFrame или setInterval не обойтись, так же как и при отлове нажатия правой кнопки мыши, левую можно словить onMouseDown + Key.isDown.

Kikasso 22.09.2007 13:02

А так не лучше?
Код:

class WorkArea extends MovieClip {

 //радиовещание
public var addListener:Function;
public var removeListener:Function;
public var broadcastMessage:Function;

 //флаг для проверки зажатия средней клавишы
private var flag:Boolean=false;

function WorkArea() {
 AsBroadcaster.initialize(this);
 this.addListener(this);
}
private function onEnterFrame():Void{
//..
}
private function onMiddle():Void{
//..
}
private function offMiddle():Void{
//..
}


GFreemen 22.09.2007 14:58

2 Kikasso
Простите, вы предлагаете onEnterFrame(),onMiddle(),offMiddle() вынести за перделы тела функции WorkArea()?

Попребовал:Attribute used outside class.
private function onEnterFrame():Void{ и т.д.
Может быть я что-то неправильно записал...
Но по-любому, что изменится если onEnterFrame() будет проверять нажатие кнопки вне WorkArea() или в ней?


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

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