Эта строка выглядит подозрительно:
var vTimer:Timer; new Timer(10)
Там есть два утверждения: первое говорит, что будет таймер с именем vTimer, второе создает новый таймер с интервалом 10 мс.Я ожидаю, что вы хотели, чтобы был один оператор, который бы создал Timer и назначил его для vTimer.Таким образом, это должно быть:
var vTimer:Timer = new Timer(10);
Я не внимательно изучил остальную часть кода, но я надеюсь, что это поможет вам.
edit: При более внимательном рассмотрении остальной части вашего кода я вижу немало проблем.
Учитывая настройку таймера, vTimer
будет вызывать MovementTimer
каждые 10 мс.100 раз в секунду.Внутри каждого звонка на MovementTimer
вы добавляете нового слушателя для KEY_DOWN
, поэтому через 1 секунду при нажатии клавиши будет 100 звонков на Acceleration
.
Вам следует переместить обработчик клавишфункции и настройки слушателя вне вашей функции таймера.Похоже, вы пытаетесь реализовать шаблон, в котором ключевые слушатели устанавливают флаг (vLeft
и т. Д.), А таймер применяет ускорение к каждому тику.Это хороший шаблон, но вам нужно сделать немало исправлений, прежде чем он заработает.
Вот базовая структура, которую я бы использовал для слушателей и флаги клавиш:
var left:Boolean = false;
var right:Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
function onKeyDown(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.LEFT) {
left = true;
}
else if (event.keyCode == Keyboard.RIGHT) {
right = true;
}
}
function onKeyUp(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.LEFT) {
left = false;
}
else if (event.keyCode == Keyboard.RIGHT) {
right = false;
}
}
var timer:Timer = new Timer(10);
timer.addListener(TimerEvent.TIMER, onTimer);
function onTimer(event:TimerEvent):void {
if (left) {
// do left acceleration things
}
else {
// deceleration things
}
if (right) {
// do right acceleration things
}
else {
// deceleration things
}
// apply movements
}
У меня естьне тестировал этот код, но, надеюсь, понятно, чем он отличается от вашего собственного кода.После того, как вы поработаете, вы сможете снова настроить ускорение / замедление на значимые значения.
Несколько других вещей, на которые стоит обратить внимание / подумать:
- Назначение значения длясам по себе ничего не делает, поэтому вы можете удалить часть, в которой вы говорите
vMove = vMove
- Вы используете много ненужных блоков (части между
{
и }
) вокруг простых операторов.В actionscript (и javascript) они не изменяют область видимости переменных, за исключением классов и функций классов, поэтому вы можете удалить их, если они не нужны для операторов if / else. - ваш обработчик ключей up устанавливает
vLeft
и vRight
оба равны false.Что произойдет, если я нажму и левую, и правую клавиши, но отпущу только одну из них?
Как только вы довольны своим кодом, вам следует поискать библиотеку для обработки опроса клавиш.для тебя.Быстрый поиск в Google показывает, что http://code.google.com/p/bigroom/wiki/KeyPoll поможет вам избежать использования спагетти-кода, если вы хотите таким же образом поддерживать другие нажатия клавиш.