Я хотел бы сохранить мои события клавиатуры, но также добавить события мыши для работы. Мои игры с клавиатурой прекрасно работают, я просто не могу разглядеть, как добавить к ним события мыши.Как я могу преобразовать свои события клавиатуры AS3 в события мыши?
Я несколько MovieClips на моей сцене осталось вплоть до т.д.
Character.as
[code]
if(m_keyboard.IsKeyDown(eKeyCodes.kLeftArrow))
{
walking = true;
x += 1;
this.scaleX = 1;
}
if(m_keyboard.IsKeyDown(eKeyCodes.kRightArrow))
etc....
[code]
eKeyCodes.as
[code]
static public const kLeftArrow:int = 37;
static public const kRightArrow:int = 39;
etc....
[/code]
Keyboard.as
[/code]
public class Keyboard
{
private const kNumKeyCodes:int = 255;
private var m_liveKeyState:Vector.<Boolean>;
private var m_keyState:Vector.<Boolean>;
private var m_lastKeyState:Vector.<Boolean>;
public function Keyboard(stage:Stage)
{
// add handlers
stage.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDown, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_UP, OnKeyUp, false, 0, true);
// vector is an array of booleans , the array is length is passed into the constructor as 255.
m_keyState = new Vector.<Boolean>(kNumKeyCodes);
m_lastKeyState = new Vector.<Boolean>(kNumKeyCodes);
m_liveKeyState = new Vector.<Boolean>(kNumKeyCodes);
// clear state
for (var i:int = 0; i<kNumKeyCodes; i++)
{
// the whole array is false;
m_keyState[i] = false;
m_lastKeyState[i] = false;
m_liveKeyState[i] = false;
}
}
public function Update():void
{
for (var i:int = 0; i<kNumKeyCodes; i++)
{
m_lastKeyState[i] = m_keyState[i];
m_keyState[i] = m_liveKeyState[i];
}
}
private function OnKeyDown(e:KeyboardEvent):void
{
m_liveKeyState[e.keyCode] = true;
trace("m_liveKeyState = " + e.keyCode);
}
private function OnKeyUp(e:KeyboardEvent):void
{
m_liveKeyState[e.keyCode] = false;
}
public function IsKeyDown(key:int):Boolean
{
// if key is down leftarrow (36) && 36 < 255 do no error; as key is a valid key;
Assert(key >= 0 && key <= kNumKeyCodes, "Keyboard.IsKeyDown(): invalid key!");
return m_keyState[key];
}
/// Is key transitioning
public function IsKeyDownTransition(key:int):Boolean
{
Assert(key >= 0 && key <= kNumKeyCodes, "Keyboard.IsKeyDownTransition(): invalid key!");
return !m_lastKeyState[key] && m_keyState[key];
}
}
}
[/code]
я что-то вроде думать ....
TouchButtons.as
[code]
icon.leftButton.addEventListner(MouseEvent.MOUSE_DOWN, leftButtonPressed, false, 0, true);
icon.RightButton.addEventListner(MouseEvent.MOUSE_DOWN, rightButtonPressed, false, 0, true);
public function leftButtonPressed(event:MouseEvent):void
{
m_keyboard.IsKeyDown(eKeyCodes.kLeftArrow );
}
etc...
[code]
Но что dosn't похоже на работу, является есть простой способ сделать это.
Я дам, что попробовать, спасибо, я также должен был бы сделать eventlisteners для выпуска левой и правой кнопок тоже не так ли? –
Да, вам нужно добавить eventListeners для других кнопок. Вы можете использовать одну функцию обработчика событий для всех кнопок, которые вы хотите, и переключить цель (кнопки) в этой функции. – Pan
Я написал четыре функции для левой нажатой, левой выпущенной правой нажатой, правой выпущенной, меняя истину и ложь в liveKeyState, мой персонаж идет влево и вправо, но переход слева направо быстро заставляет моего персонажа ходить в своем собственном направлении даже когда я ничего не нажимаю, мой код клавиатуры в порядке. Я не знаю, почему это происходит. –