Добрый день, я начинающий флешер, прошу сильно не пинать, а просто ткнуть в ошибку или решение. Вопрос собственно в чём, пишу небольшую игру, летает кораблик, стреляет. Всё далеко от завершения, но не могу решить одну проблему, управление полностью с клавиатуры. Если я начинаю управлять кораблём, зажимаю кнопки вперёд(стрелка)+поворот в право(стрелка)+огонь (пробел), то всё нормально, а вот если зажимаю вперёд+поворот влево+огонь, то корабль продолжает летать, но не стреляет, либо летит, стреляет, но не поворачивает, в общем обрабатывает только два события из трёх. При этом в колонках слышен звук, повествующий о том, что зажато много клавиш. Код ниже, пишу в одном кадре:

Код AS3:
AS 3.0
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
import flash.events.Event;
var ship: gl_ship = new gl_ship();
var strbtn: LibrarySymbol = new LibrarySymbol();
addChild(strbtn);//кнопка старта
strbtn.x = 800;
strbtn.y = 450;
strbtn.addEventListener(MouseEvent.CLICK, clickbtn);
function clickbtn(e: MouseEvent): void
{
removeChild(strbtn);
addChild(ship);
ship.x = 800;
ship.y = 450;
ship.width = 100;
ship.height = 90;
}
var upPressed: Boolean = false;
var downPressed: Boolean = false;
var leftPressed: Boolean = false;
var rightPressed: Boolean = false;
//управление кораблём
ship.rotation = 0;
var a: Number = 0.8; //ускорение
var s: Number = 0.7 //замедление
var radians: Number = ship.rotation * Math.PI / 180;
var vectorX: Number = 0;
var vectorY: Number = 0;
var speed: Number = 4;
ship.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed);
function fl_MoveInDirectionOfKey(event: Event)
{
if (ship.x > 1597)
{
ship.x = 3;
}
if (ship.x < 3)
{
ship.x = 1597;
}
if (ship.y > 897)
{
ship.y = 3;
}
if (ship.y < 3)
{
ship.y = 897;
}
if (rightPressed)
{
ship.rotation += 8;
}
if (leftPressed)
{
ship.rotation -= 8;
}
if (upPressed)
{
if (a <= 2)
{
a+=0.2;
}
radians = ship.rotation * Math.PI / 180;
vectorX = Math.cos(radians);
vectorY = Math.sin(radians);
ship.x -= speed * vectorX * a;
ship.y -= speed * vectorY * a;
}
}
function fl_SetKeyPressed(event: KeyboardEvent): void
{
switch (event.keyCode)
{
case Keyboard.UP:
{
upPressed = true;
break;
}
case Keyboard.LEFT:
{
leftPressed = true;
break;
}
case Keyboard.RIGHT:
{
rightPressed = true;
break;
}
case (event.keyCode = 32):
{
fireBoolean = true;
}
}
}
function fl_UnsetKeyPressed(event: KeyboardEvent): void
{
switch (event.keyCode)
{
case Keyboard.UP:
{
upPressed = false;
break;
}
case Keyboard.LEFT:
{
leftPressed = false;
break;
}
case Keyboard.RIGHT:
{
rightPressed = false;
break;
}
case (event.keyCode = 32):
{
fireBoolean = false;
break;
}
}
}
var fireBoolean: Boolean = false;
var bollF: boll_ms = new boll_ms();// снаряд
var speedboll: Number = 35;
var radiansBoll: Number = bollF.rotation * Math.PI / 180;
var vectorBollX: Number = Math.cos(radiansBoll);
var vectorBollY: Number = Math.sin(radiansBoll);
bollF.rotation = 0;
stage.addEventListener(KeyboardEvent.KEY_DOWN, fn_fire);
function fn_fire(e: KeyboardEvent): void
{
if (fireBoolean)
//if (e.keyCode == 32)
{
addChild(bollF);
bollF.rotation = ship.rotation;
radiansBoll = bollF.rotation * Math.PI / 180;
vectorBollX = Math.cos(radiansBoll);
vectorBollY = Math.sin(radiansBoll);
bollF.x = ship.x;
bollF.y = ship.y;
}
trace(e.keyCode);
}
bollF.addEventListener(Event.ENTER_FRAME, boll_action);
function boll_action(e: Event):void
{
bollF.x -= speedboll * vectorBollX;
bollF.y -= speedboll * vectorBollY;
}