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

Catavari 17.07.2011 10:47

Простое движение с клавиатуры.
 
Подскажите такую вещь, пытаюсь сделать простое движение объекта с клавиатуры:

Код AS3:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
var speed:Number = 10;
function keyPressed(evt:KeyboardEvent):void {
        if (evt.keyCode == 39) {
        this.hero.x += speed;
        }
        if (evt.keyCode == 37) {
                this.hero.x -= speed;
        }
}

Если нажать и держать клавишу Объект сначала делает 1 шаг на величину speed, останавливается, затем движется как надо.

в AS2 делал аналогичное движение вот так:
Код AS1/AS2:

if (Key.isDown(Key.Right)) {
_x += speed;
}
if (Key.isDown(Key.DOWN)) {
_x -= speed;
}

Все работало замечательно, объект сразу двигался в нужном направлении без остановки. Как победить эту остановку в AS3?

samana 17.07.2011 11:45

В as2 вы подписывались на EnterFrame верно? А в as3 уже не подписываетесь.

Wily 17.07.2011 19:02

Код AS1/AS2:

package 
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
 
        public class Hero extends MovieClip
        {
                public var step = 5; // скорость перемещения
 
                var leftPressed:Boolean;
                var rightPressed:Boolean;
 
                public function Hero()
                {
                        if (stage)
                        {
                                ON_INIT();
                        }
                        else
                        {
                                addEventListener(Event.ADDED_TO_STAGE, ON_INIT);
                        }
                }
 
                public function ON_INIT(event:Event = null)
                {
                        removeEventListener(Event.ADDED_TO_STAGE, ON_INIT);
 
                        stage.addEventListener(Event.ENTER_FRAME, ON_ENTER_FRAME);
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, ON_KEY_DOWN);
                        stage.addEventListener(KeyboardEvent.KEY_UP, ON_KEY_UP);
                }
 
                public function ON_ENTER_FRAME(e:Event)
                {
                        if (leftPressed)
                        {
                                this.x -= step;
                        }
                        else if (rightPressed)
                        {
                                this.x += step;
                        }
                }
 
                public function ON_KEY_DOWN(e:KeyboardEvent)
                {
                        if (e.keyCode==37)
                        {
                                leftPressed=true;
                        }
                        else if (e.keyCode==39)
                        {
                                rightPressed=true;
                        }
                }
 
                public function ON_KEY_UP(e:KeyboardEvent)
                {
                        if (e.keyCode==37)
                        {
                                leftPressed=false;
                        }
                        else if (e.keyCode==39)
                        {
                                rightPressed=false;
                        }
                }       
        }
}



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

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