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

Quatro0 12.05.2012 18:17

Программное движение
 
Здравствуйте!

Решил написать простенькую игру. Код ниже отвечает за движение объекта mc вправо. При зажиме клавиши Вправо объект mc передвигается вправо на 10 пикселей, далее следует небольшая задержка, потом объект начинает двигаться нормально. Можно ли как-то ускорить процесс?





Код AS3:

stop();
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
 
function onKD(e:KeyboardEvent):void
{
 
        if(e.keyCode == 39)
        {
        mc.x = mc.x + 10;
        }
 
}


Hauts 12.05.2012 18:56

В обработчике события нажатия на клавишу меняйте значения moveX и moveY на -1 и 1 (в зависимости от направления движения). В обработчике события отжатия клавиш - обнуляйте значения. В обработчике ENTER_FRAME проверяйте эти значения и, например, координату x меняйте таким образом: mc.x = moveX * moveSpeed.

Quatro0 12.05.2012 20:03

Честно говоря, я ничего не понял из того что Вы сказали, но благодаря Вам удалось осуществить что-то похожее)


Код AS1/AS2:

stop();
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
addEventListener(Event.ENTER_FRAME, onFr);
 
 
var moveX:Number = 0;
function onFr(e:Event):void
{
        if(moveX==1)
        {
                mc.x= mc.x + 10;;
        }
}
 
 
 
 
function onKD(e:KeyboardEvent):void
{
 
 
        if(e.keyCode == 39)
        {
        moveX = 1;
        mc.x = mc.x + 1;;
        mc.gotoAndStop(2);
 
 
        }
 
}
 
 
function onKU(e:KeyboardEvent):void
{
        mc.gotoAndStop(1);
        moveX = 0;
}

Добавлено через 2 часа 7 минут

Владимир Буквин 13.05.2012 00:37

Можно - надо передвигать по таймеру! - при зажиме клавиши запустить таймер, и каждую единицу времени увеличивать или уменьшать значение икс.
То, что происходит задержка - это не flash виноват - это клавиатура так настроена - так и должно быть.
сначала набирается символ, затем после задержки дублируется, если клавиша не отпущена.

Monade 2 13.05.2012 16:08

я по-другому делал. вешаем два обработчика события KeyboardEvent.KEY_DOWN и KeyboardEvent.KEY_UP на соотв. функции, и по коду нажатой (или отжатой) клавиши меняем соответствующее значение массива или объекта, в зависимости от реализации. а третья функция запускается когда надо выяснить состояние кнопок игрока - по ENTER_FRAME например. и возвращает состояния кнопок (тот самый массив)

Владимир Буквин 13.05.2012 17:17

да -повесить слушатель на событие
Код AS3:

Event.ENTER_FRAME

это хорошая замена таймеру


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

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