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

stweet 09.09.2010 15:43

Мгновенная реакция объекта.
 
Подскажите как сделать мгновенный отклик обьекта, к примеру:
пусть то будет сдвиг в лево на нажатие клавиши "Left".

Код:

function move (e:KeyboardEvent):void {    // такой вариант не катит, т.к. обьект заикается.
  switch (e.KeyCode){
    case /*code клавиши.*/ :
    object.x --;
    break;
}


-De- 09.09.2010 16:27

Event::updateAfterEvent() ?
Увеличить фреймрейт? =)

Jewelz 09.09.2010 16:29

Код AS3:

addEventListener(KeyboardEvent.KEY_DOWN, startMove);
addEventListener(KeyboardEvent.KEY_UP, stopMove);
 
function startMove (e:KeyboardEvent):void
{
  addEventListener(Event.ENTER_FRAME, move);
}
 
function stopMove (e:KeyboardEvent):void
{
  removeEventListener(Event.ENTER_FRAME, move);
}
 
//UPD:
 
function move (e:Event):void
{
    object.x --;
}


stweet 09.09.2010 19:19

Jewelz спс.

Добавлено через 8 минут
Но, признаться работает не стабильно =(
Есть ещё какие нибуд варианты?

Добавлено через 13 минут
Можно ли сделать через "Timer"?

Zik. 09.09.2010 20:39

Что значит не стабильно? Через EnterFrame все нормально работает

stweet 09.09.2010 23:47

Суть в том что когда жмём влево а после в право и с ново влево, объект на мгновение замирает.

VVall 10.09.2010 00:29

Много раз обсуждалось - по нажатию клавиши ставим флаг, по отпусканию сбрасываем, в enterframe изменяем координаты, если флаг установлен.

stweet 10.09.2010 00:45

Цитата:

Сообщение от VVall (Сообщение 934714)
Много раз обсуждалось - по нажатию клавиши ставим флаг, по отпусканию сбрасываем, в enterframe изменяем координаты, если флаг установлен.

Вот с флагами я как раз не знаком =( Если не трудно, можно по подробнее?

VVall 10.09.2010 01:31

Флаг - просто переменная, которая будет принимать одно из двух значений (кнопка нажата, кнопка отжата). Логично использовать для неё тип Boolean.

stweet 10.09.2010 01:44

Цитата:

Сообщение от VVall (Сообщение 934745)
Флаг - просто переменная, которая будет принимать одно из двух значений (кнопка нажата, кнопка отжата). Логично использовать для неё тип Boolean.

а, ясно. Просто я ещё не совсем знаком с терминами. Познаю, как говориться, в процессе выполнения простеньких задачек. =)

Добавлено через 47 часов 16 минут
Суть проблемы такова, при активном использование (типа, серия ударов из мортал комбат ультимэйт на сеге) клавиши не отвечают, либо путаются в назначении. Нажимаю: влево, вниз, вверх поочерёдно но быстро, выполняется действие наискосок вниз, влево.

Подскажите пожалуйста, есть ли более эффективная возможность манипулировать объектом или подскажите как улучшить этот код. Заранее, ОЧЕНЬ БУДУ БЛАГОДАРЕН.

Привожу код который использую.

Плюс, ещё хочу добавить "space", в этом коде его нет так как с ним ещё хуже.

Код AS3:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.ui.*;
 
        public class Main extends Sprite {
 
                private var upPress:Boolean;
                private var leftPress:Boolean;
                private var rightPress:Boolean;
                private var downPress:Boolean;
                private var spacePress:Boolean;
 
                public function Main() {
 
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDawnListener, false, 0, false);
                        stage.addEventListener(KeyboardEvent.KEY_UP, KeyUpListener, false, 0, false);
                }
 
                private function KeyDawnListener (e:KeyboardEvent):void {
 
                        if (e.keyCode == Keyboard.UP) {
                                upPress = true;
                        } else if (e.keyCode == Keyboard.LEFT) {
                                leftPress = true;
                        } else if (e.keyCode == Keyboard.RIGHT) {
                                rightPress = true;
                        } else if (e.keyCode == Keyboard.DOWN) {
                                downPress = true;
                        } else if (e.keyCode == Keyboard.SPACE) {
                                spacePress = true;
                                trace("spacePress");
                        }
 
                        if (upPress&&leftPress) {
                                trace("upPress leftPress");
 
                        } else if (upPress&&rightPress) {
                                trace("upPress rightPress");
 
                        } else if (downPress&&leftPress) {
                                trace("downPress leftPress");
 
                        } else if (downPress&&rightPress) {
                                trace("downPress rightPress");
 
                        } else if (upPress) {
                                trace("upPress");
 
                        } else if (rightPress) {
                                trace("rightPress");
 
                        } else if (leftPress) {
                                trace("leftPress");
 
                        } else if (downPress) {
                                trace("downPress");
 
                        }
                }
 
                private function KeyUpListener(e:KeyboardEvent):void {
 
                        if (e.keyCode == Keyboard.UP) {
                                upPress = false;
                        } else if (e.keyCode == Keyboard.LEFT) {
                                leftPress = false;
                        } else if (e.keyCode == Keyboard.RIGHT) {
                                rightPress = false;
                        } else if (e.keyCode == Keyboard.DOWN) {
                                downPress = false;
                        } else if (e.keyCode == Keyboard.SPACE) {
                                spacePress = false;
                        }
                }
        }
}



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

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