0

Я хотел бы сохранить мои события клавиатуры, но также добавить события мыши для работы. Мои игры с клавиатурой прекрасно работают, я просто не могу разглядеть, как добавить к ним события мыши.Как я могу преобразовать свои события клавиатуры 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 похоже на работу, является есть простой способ сделать это.

ответ

0

Я думаю, вы хотите, чтобы он работал как этапное событие.

public function leftButtonPressed(event:MouseEvent):void 
{ 
     m_liveKeyState[eKeyCodes.kLeftArrow] = true; 
} 
+0

Я дам, что попробовать, спасибо, я также должен был бы сделать eventlisteners для выпуска левой и правой кнопок тоже не так ли? –

+0

Да, вам нужно добавить eventListeners для других кнопок. Вы можете использовать одну функцию обработчика событий для всех кнопок, которые вы хотите, и переключить цель (кнопки) в этой функции. – Pan

+0

Я написал четыре функции для левой нажатой, левой выпущенной правой нажатой, правой выпущенной, меняя истину и ложь в liveKeyState, мой персонаж идет влево и вправо, но переход слева направо быстро заставляет моего персонажа ходить в своем собственном направлении даже когда я ничего не нажимаю, мой код клавиатуры в порядке. Я не знаю, почему это происходит. –

0

Friend'm сходит с ума, я хотел бы преобразовать этот код, чтобы использовать сенсорный экран

var leftPressed:Boolean = false; 
 
var rightPressed:Boolean = false; 
 
var upPressed:Boolean = false; 
 
var downPressed:Boolean = false; 
 

 
var leftBumping:Boolean = false; 
 
var rightBumping:Boolean = false; 
 
var upBumping:Boolean = false; 
 
var downBumping:Boolean = false; 
 

 
var leftBumpPoint:Point = new Point(-30, -55); 
 
var rightBumpPoint:Point = new Point(70, -50); 
 
var upBumpPoint:Point = new Point(0, -110); 
 
var downBumpPoint:Point = new Point(0, 0); 
 

 
var scrollX:Number = 0; 
 
var scrollY:Number = 500; 
 

 
var xSpeed:Number = 0; 
 
var ySpeed:Number = 0; 
 

 
var speedConstant:Number = 2; 
 
var frictionConstant:Number = 0.9; 
 
var gravityConstant:Number = 1.8; 
 
var jumpConstant:Number = -30; 
 
var maxSpeedConstant:Number = 18; 
 

 
var doubleJumpReady:Boolean = false; 
 
var upReleasedInAir:Boolean = false; 
 

 
var keyCollected:Boolean = false; 
 
var doorOpen:Boolean = false; 
 

 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
 
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 
 

 
stage.addEventListener(Event.ENTER_FRAME, loop); 
 

 
function loop(e:Event):void{ 
 
\t if(back.collisions.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)){ 
 
\t \t //trace("leftBumping"); 
 
\t \t leftBumping = true; 
 
\t } else { 
 
\t \t leftBumping = false; 
 
\t } 
 
\t 
 
\t if(back.collisions.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)){ 
 
\t \t //trace("rightBumping"); 
 
\t \t rightBumping = true; 
 
\t } else { 
 
\t \t rightBumping = false; 
 
\t } 
 
\t 
 
\t if(back.collisions.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)){ 
 
\t \t //trace("upBumping"); 
 
\t \t upBumping = true; 
 
\t } else { 
 
\t \t upBumping = false; 
 
\t } 
 
\t 
 
\t if(back.collisions.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)){ 
 
\t \t //trace("downBumping"); 
 
\t \t downBumping = true; 
 
\t } else { 
 
\t \t downBumping = false; 
 
\t } \t 
 
\t 
 

 
\t if(leftPressed){ 
 
\t \t xSpeed -= speedConstant; 
 
\t \t player.scaleX = -1; 
 

 
\t } else if(rightPressed){ 
 
\t \t xSpeed += speedConstant; 
 
\t \t player.scaleX = 1; 
 
\t } 
 

 

 
\t if(leftBumping){ 
 
\t \t if(xSpeed < 0){ 
 
\t \t \t xSpeed *= -0.5; 
 
\t \t } 
 
\t } 
 
\t 
 
\t if(rightBumping){ 
 
\t \t if(xSpeed > 0){ 
 
\t \t \t xSpeed *= -0.5; 
 
\t \t } 
 
\t } 
 
\t 
 
\t if(upBumping){ 
 
\t \t if(ySpeed < 0){ 
 
\t \t \t ySpeed *= -0.5; 
 
\t \t } 
 
\t } 
 
\t 
 
\t if(downBumping){ //if we are touching the floor 
 
\t \t if(ySpeed > 0){ 
 
\t \t \t ySpeed = 0; //set the y speed to zero 
 
\t \t } 
 
\t \t if(upPressed){ //and if the up arrow is pressed 
 
\t \t \t ySpeed = jumpConstant; //set the y speed to the jump constant 
 
\t \t } 
 
\t \t 
 
\t \t //DOUBLE JUMP 
 
\t \t if(upReleasedInAir == true){ 
 
\t \t \t upReleasedInAir = false; 
 
\t \t } 
 
\t \t if(doubleJumpReady == false){ 
 
\t \t \t doubleJumpReady = true; 
 
\t \t } 
 
\t } else { //if we are not touching the floor 
 
\t \t 
 
\t \t ySpeed += gravityConstant; //accelerate downwards 
 
\t \t 
 
\t \t //DOUBLE JUMP 
 
\t \t if(upPressed == false && upReleasedInAir == false){ 
 
\t \t \t upReleasedInAir = true; 
 
\t \t \t //trace("upReleasedInAir"); 
 
\t \t } 
 
\t \t if(doubleJumpReady && upReleasedInAir){ 
 
\t \t \t if(upPressed){ //and if the up arrow is pressed 
 
\t \t \t \t //trace("doubleJump!"); 
 
\t \t \t \t doubleJumpReady = false; 
 
\t \t \t \t ySpeed = jumpConstant; //set the y speed to the jump constant 
 
\t \t \t } 
 
\t \t } 
 
\t \t 
 
\t } 
 
\t 
 
\t if(keyCollected == false){ 
 
\t \t if(player.hitTestObject(back.doorKey)){ 
 
\t \t \t back.doorKey.visible = false; 
 
\t \t \t keyCollected = true; 
 
\t \t \t trace("key collected"); 
 
\t \t } 
 
\t } 
 
\t 
 
\t if(doorOpen == false){ 
 
\t \t if(keyCollected == true){ 
 
\t \t \t if(player.hitTestObject(back.lockedDoor)){ 
 
\t \t \t \t back.lockedDoor.gotoAndStop(2); 
 
\t \t \t \t doorOpen = true; 
 
\t \t \t \t trace("door open"); 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 
\t \t \t \t \t \t \t \t \t \t \t 
 
\t 
 
\t if(xSpeed > maxSpeedConstant){ //moving right 
 
\t \t xSpeed = maxSpeedConstant; 
 
\t } else if(xSpeed < (maxSpeedConstant * -1)){ //moving left 
 
\t \t xSpeed = (maxSpeedConstant * -1); 
 
\t } 
 
\t 
 
\t xSpeed *= frictionConstant; 
 
\t ySpeed *= frictionConstant; 
 
\t 
 
\t if(Math.abs(xSpeed) < 0.5){ 
 
\t \t xSpeed = 0; 
 
\t } 
 
\t 
 
\t scrollX -= xSpeed; 
 
\t scrollY -= ySpeed; 
 

 
\t back.x = scrollX; 
 
\t back.y = scrollY; 
 
\t 
 
\t sky.x = scrollX * 0.2; 
 
\t sky.y = scrollY * 0.2; 
 
\t 
 
} 
 

 
function keyDownHandler(e:KeyboardEvent):void{ 
 
\t if(e.keyCode == Keyboard.LEFT){ 
 
\t \t leftPressed = true; 
 
\t 
 
\t } else if(e.keyCode == Keyboard.RIGHT){ 
 
\t \t rightPressed = true; 
 
\t 
 
\t } else if(e.keyCode == Keyboard.UP){ 
 
\t \t upPressed = true; 
 
\t 
 
\t } else if(e.keyCode == Keyboard.DOWN){ 
 
\t \t downPressed = true; 
 
\t } \t 
 
} 
 

 
function keyUpHandler(e:KeyboardEvent):void{ 
 
\t if(e.keyCode == Keyboard.LEFT){ 
 
\t \t leftPressed = false; 
 
\t 
 
\t } else if(e.keyCode == Keyboard.RIGHT){ 
 
\t \t rightPressed = false; 
 
\t 
 
\t } else if(e.keyCode == Keyboard.UP){ 
 
\t \t upPressed = false; 
 
\t 
 
\t } else if(e.keyCode == Keyboard.DOWN){ 
 
\t \t downPressed = false; 
 
\t } \t 
 
}

+0

Это не ответ, и вы не должны публиковать его здесь. Вы должны опубликовать свой собственный вопрос с подробным описанием того, что вы ищете, и тем, что вы пробовали, и тем, что у вас есть, размещением любого соответствующего кода. –

Смежные вопросы