Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   не работает KEY_DOWN (http://www.flasher.ru/forum/showthread.php?t=126360)

Zik. 17.06.2009 14:57

не работает KEY_DOWN
 
В общем проблема такая: нужно, чтобы при нажатии стрелочек на клаве, клип двигался.
Но почему-то не получается.
Вот класс самого клипа:
Код AS3:

package {
        import flash.display.*
        import flash.events.*
        import flash.ui.Keyboard
        public class Hero extends MovieClip {
                public function Hero(xPositionn:Number, yPositionn:Number):void {
                        this.x = xPositionn;
                        this.y = yPositionn;
                        this.addEventListener(KeyboardEvent.KEY_DOWN, control)
                }
                public function control(e:KeyboardEvent):void {
                        if (e.keyCode == Keyboard.LEFT) {
                                this.x -= 5
                        }
                        if (e.keyCode == Keyboard.RIGHT) {
                                this.x += 5
                        }
                }
        }
}

Это код в главном классе:

Код AS3:

package {
        import flash.display.*
        import flash.events.*
        public class Root extends MovieClip {
                var hero:Hero = new Hero(275, 300)
                public function Root():void {
                        addChild(hero)
                }
 
        }
}

Самое интересное, что когда код, отвечающий за нажатие клавиш, был в руте, все было нормально.

Заранее благодарю

iflamberg 17.06.2009 15:08

согласно коду событие будет происходить, только когда фокус флешки будет у hero. Переделай на stage.addEventListener(KeyboardEvent.KEY_DOWN, control)

Gal4enochek 17.06.2009 15:08

У меня обычно тоже обработчики клавиатуры гючат, поэтому я их всегда на stage цепляю. Только перед этим нужно убедится, что он есть или написать обработчик для Event.ADDED_TO_STAGE, а в нем уже цеплять обработчик для клавы
Код AS3:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);


Zik. 17.06.2009 15:29

повесил я на stage и выдалась следующая ошибка:
Код:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
        at Hero$iinit()
        at Root$iinit()

что делать на этот раз?

iflamberg 17.06.2009 15:37

тебе выше написали.
Нельзя подвесить событие на stage, если сам мувик еще не добавлен на сцену (потому что stage=null).
Нужно сначало подвесить событие Event.ADDED_TO_STAGE, а на его обработчике подвесить KEY_DOWN.

Zik. 17.06.2009 15:48

спасибо всем большое!
все заработало


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

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