Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   не работает управление с клавиатуры (http://www.flasher.ru/forum/showthread.php?t=148688)

reNiks 08.01.2011 18:13

не работает управление с клавиатуры
 
написал значит я функцию которая должна управлять мувиком с клавиатуры. Вот код:
Код AS3:

package ru.RainbowAdventure.Characters
{
 
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    import flash.utils.*;
 
    import flash.text.*;
    public class Hero extends MovieClip
    {
        public static var ball:MovieClip;
        public var container_hero:MovieClip;
        public function Hero()
        {
 
            addHero();
            addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
 
            trace("Hero initialized...");
        }
        private function addHero()
        {
            container_hero = new MovieClip();
            ball = new Hero_mc  ;
            ball.x = 36;
            ball.y = 443;
            ball.gotoAndStop(1);
            addChild(container_hero);
            container_hero.addChild(ball);
            trace("Hero showed...");
 
        }
 
        public function keyControl(e:KeyboardEvent):void
        {
 
 
            if (e.keyCode == Keyboard.LEFT)
            {
                ball.x -=  3;
            }
            if (e.keyCode == Keyboard.RIGHT)
            {
                ball.x +=  3;
            }
            if (e.keyCode == Keyboard.DOWN)
            {
                ball.y +=  3;
            }
            if (e.keyCode == Keyboard.UP)
            {
                ball.y -=  3;
            }
            trace("key control initialized...");
 
        }
    }
}

она не работает. протрейсил функция keyControl не вызывается. в чем проблема не нашел. может кто помочь? Пожалуйста

Bgg 08.01.2011 18:16

Код AS3:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);


reNiks 08.01.2011 18:25

Цитата:

Сообщение от Bgg (Сообщение 962850)
Код AS3:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);


так вылетает ошибка:
Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
    \Hero.as:18]


Bgg 08.01.2011 18:29

Угу, ведь stage появляется после добавления в список отображения.
Код AS3:

        public function Hero()
        {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(event:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            addHero();
            addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
            trace("Hero initialized...");
        }


reNiks 08.01.2011 18:40

хм. так всеравно не работает. функция keyControl не появляется, не трейсится

tsarapkabel 08.01.2011 19:11

Покажите обновлённый код. Должно работать.

reNiks 08.01.2011 19:22

Код AS3:

package ru.RainbowAdventure.Characters
{
 
        import flash.display.*;
        import flash.events.*;
        import flash.ui.*;
        import flash.utils.*;
 
        import flash.text.*;
        public class Hero extends MovieClip
        {
                public static var ball:MovieClip;
                public var container_hero:MovieClip;
                public function Hero()
                {
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
                private function init(event:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        addHero();
                        addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
                        trace("Hero initialized...");
                }
                private function addHero()
                {
                        container_hero = new MovieClip();
                        ball = new Hero_mc  ;
                        ball.x = 36;
                        ball.y = 443;
                        ball.gotoAndStop(1);
                        addChild(container_hero);
                        container_hero.addChild(ball);
                        trace("Hero showed...");
 
                }
 
                private function keyControl(e:KeyboardEvent):void
                {
 
 
                        if (e.keyCode == Keyboard.LEFT)
                        {
                                ball.x -=  3;
                        }
                        if (e.keyCode == Keyboard.RIGHT)
                        {
                                ball.x +=  3;
                        }
                        if (e.keyCode == Keyboard.DOWN)
                        {
                                ball.y +=  3;
                        }
                        if (e.keyCode == Keyboard.UP)
                        {
                                ball.y -=  3;
                        }
                        trace("Key control initialized...");
 
                }
        }
}

вот

tsarapkabel 08.01.2011 19:26

Вот так у меня проходит инициализация:
Код AS3:

package {
 
        import flash.display.MovieClip;
        import flash.events.*;
 
        /*
                @author soniko
        */

 
        public class Hero extends MovieClip {
 
                public function Hero() {
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(event:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
                }
 
                public function keyControl(e:KeyboardEvent):void {
                        trace("key control initialized...");
                }
        }
}


reNiks 08.01.2011 19:33

то есть у вас все работает? а какая версия флеша и его настройки?
мдаам странно. может подскажете почему у меня может функция keyControl не инициализироваться?

tsarapkabel 08.01.2011 19:51

Вот рабочий код на вашем примере
Код AS3:

package {
 
        import flash.display.*;
        import flash.events.*;
        import flash.ui.*;
        import flash.utils.*;
        import flash.text.*;
 
 
        /*
                @author soniko
        */

 
        public class Hero extends MovieClip {
 
                public static var ball:Shape;
                public var container_hero:MovieClip;
 
                public function Hero() {
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(event:Event):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        addHero();
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
                        trace("Hero initialized...");
                }
 
                private function addHero():void {
                        container_hero = new MovieClip();
                        ball = new Shape();
                        ball.graphics.lineStyle (5, 0xFF0000);
                        ball.graphics.drawCircle (36, 443, 20);
                        container_hero.addChild(ball);
                        this.addChild(container_hero);
                        trace("Hero showed...");
                }
 
                private function keyControl(e:KeyboardEvent):void {
                        if (e.keyCode == Keyboard.LEFT)        {
                                ball.x -=  3;
                        }
                        if (e.keyCode == Keyboard.RIGHT) {
                                ball.x +=  3;
                        }
                        if (e.keyCode == Keyboard.DOWN) {
                                ball.y +=  3;
                        }
                        if (e.keyCode == Keyboard.UP) {
                                ball.y -=  3;
                        }
                        trace("Key control initialized...");
                }
        }
}

FlashDevelop и 10-й дебаг плеер.

reNiks 08.01.2011 19:54

а Ваш работает. спасибо огромное


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

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