Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не срабатывает addEventListener (http://www.flasher.ru/forum/showthread.php?t=135138)

dixlofos 16.01.2010 17:02

Не срабатывает addEventListener
 
всем хеллоу!:bye:

Есть у меня класс Craft :
Код AS3:

package classes
{
 
        import flash.display.MovieClip;
        import flash.events.*;
        import classes.assisted.keyPressed;
 
        public class Craft extends MovieClip
        {
                var kp = new keyPressed();
 
                public function Craft():void
                {
                        trace("class craft called");       
                        addEventListener(Event.ENTER_FRAME, ef);                                               
                }
 
                public function ef(e:Event)
                {                       
                    kp.keyP(this);               
                }
        }
}

и есть у меня другой класс keyPressed

Код AS3:

package classes.assisted
{
        import flash.events.*;
 
        public class keyPressed
        {               
                public function keyPressed():void
                {
                        trace("class keyPressed called");                               
                }
 
                public function keyP(obj):void
                {
                        obj.addEventListener(KeyboardEvent.KEY_DOWN, kd);       
                        obj.y-=1;
                }
 
                public function kd(event:KeyboardEvent)
                {
                        trace("^_^");
                        //trace(event.keyCode);
                }
        }
}

и после компиляции компилятор пишет "class keyPressed called", а как бы я по клавишам не стучал, то "^_^" некак не хочет написаться, хотя объект я явно передал классу, тк он медленно но верно ползет вверх:)
Почему такая несправедливость в мире?
Неужто мне прийдеться передовать не только сам объект, но и коды нажатых клавишь?

wvxvw 16.01.2010 17:14

1. Названия классов с прописной.
2. super() первой строчкой в конструкторе.
3. Вы каждый кадр вызываете addEventListener() - зачем?
4. переменные, аргументы и возвращаемый тип функций должны быть типизированы.
5. визуальные объекты диспатчат события клавиатуры только когда они в фокусе (например, если вы нажали клавишу Tab чтобы на них перевести фокус), иначе события клавиатуре диспатчатся из stage.
6. Не пишите звездочки в импортах - используйте нормальный редактор кода, где импорты подставляются сами.

dixlofos 16.01.2010 18:26

Цитата:

Сообщение от wvxvw (Сообщение 879597)
2. super() первой строчкой в конструкторе.

если чесно не очень понял зачем это, мой класс вдеь нечего не расширяет

Цитата:

Сообщение от wvxvw (Сообщение 879597)
3. Вы каждый кадр вызываете addEventListener() - зачем?

исправил, действительно глупо

Цитата:

Сообщение от wvxvw (Сообщение 879597)
4. переменные, аргументы и возвращаемый тип функций должны быть типизированы.

ну это я потом все сделаю, когда основную кость доделаю =)

Цитата:

Сообщение от wvxvw (Сообщение 879597)
5. визуальные объекты диспатчат события клавиатуры только когда они в фокусе (например, если вы нажали клавишу Tab чтобы на них перевести фокус), иначе события клавиатуре диспатчатся из stage.

когда я в классе keyPressed пишу в конструкторе "stage.addEventListener(KeyboardEvent.KEY_DOWN, kd);", то компилятор мне выдает:
"1120: Обращение несуществующего свойства stage."

что же делать-то?!:wacko:

dex157 16.01.2010 18:41

А у вот тоже вопрос, уже очень давнишний, но он в тему, поэтому решил не делать новый тред..)
При запуске выскакивает варнинг : Warning: 1090: Ошибка миграции: Flash Player не запускает обработчик событий onMouseDown автоматически во время выполнения в ActionScript 3.0. Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("mouseDown", callback_handler).

Привязка(addEventListener) происходит после объявления Sprite, и добавления его на stage

при этом не срабатывает первый щелчок на моем спрайте, все последующие работают..о0

в чем может быть проблема..? 0о

dixlofos 16.01.2010 19:52

dex157
не очень ты тут в тему, но вот - держи:
http://help.adobe.com/ru_RU/AS3LCR/F...imeErrors.html
иши там свое 1090

wvxvw 16.01.2010 20:12

>> если чесно не очень понял зачем это, мой класс вдеь нечего не расширяет
Классов, которые ничего не расширяют в AS3 не бывает.

что же делать-то?!
>> Дождаться когда стейдж станет доступным, например после события Event.ADDED_TO_STAGE

dex157:
Это дурацкое предупреждение, просто вам говорят о том, что onMouseDown - это неудачное название для функции потому что такое использовалось в AS2.

dex157 16.01.2010 20:26

wvxvw
Спасибо большое..)

Psycho Tiger 16.01.2010 20:33

Цитата:

Классов, которые ничего не расширяют в AS3 не бывает.
Постой постой, класс
Код AS3:

class Hello{
 
}

получается расширяет Object? Хотя, не совсем понимаю зачем вызывать суперкласс Object`а )

wvxvw 16.01.2010 22:01

Для порядка. Хуже вы точно этим не сделаете.

dixlofos 17.01.2010 21:27

Цитата:

Сообщение от wvxvw (Сообщение 879653)
что же делать-то?!
>> Дождаться когда стейдж станет доступным, например после события Event.ADDED_TO_STAGE

вся беда в том, что объект уже на сцене, и почему я не могу задействовать stage. я не понимаю.
Объясните пажалуйста..


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

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