簡體   English   中英

如何將AS3鍵盤事件轉換為鼠標事件?

[英]How can i convert my AS3 keyboard events into mouse events?

我想保留我的鍵盤事件,但也要添加鼠標事件。 我的游戲鍵盤事件運行正常,只是無法理解如何向其中添加鼠標事件。

我的舞台上有一些電影剪輯,左上右下等。

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]

但這似乎不起作用,有沒有簡單的方法可以做到這一點。

我想您希望它像舞台活動一樣工作。

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

朋友快瘋了,我想將此代碼轉換為在觸摸屏中使用

 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{ if(back.collisions.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)){ //trace("leftBumping"); leftBumping = true; } else { leftBumping = false; } if(back.collisions.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)){ //trace("rightBumping"); rightBumping = true; } else { rightBumping = false; } if(back.collisions.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)){ //trace("upBumping"); upBumping = true; } else { upBumping = false; } if(back.collisions.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)){ //trace("downBumping"); downBumping = true; } else { downBumping = false; } if(leftPressed){ xSpeed -= speedConstant; player.scaleX = -1; } else if(rightPressed){ xSpeed += speedConstant; player.scaleX = 1; } if(leftBumping){ if(xSpeed < 0){ xSpeed *= -0.5; } } if(rightBumping){ if(xSpeed > 0){ xSpeed *= -0.5; } } if(upBumping){ if(ySpeed < 0){ ySpeed *= -0.5; } } if(downBumping){ //if we are touching the floor if(ySpeed > 0){ ySpeed = 0; //set the y speed to zero } if(upPressed){ //and if the up arrow is pressed ySpeed = jumpConstant; //set the y speed to the jump constant } //DOUBLE JUMP if(upReleasedInAir == true){ upReleasedInAir = false; } if(doubleJumpReady == false){ doubleJumpReady = true; } } else { //if we are not touching the floor ySpeed += gravityConstant; //accelerate downwards //DOUBLE JUMP if(upPressed == false && upReleasedInAir == false){ upReleasedInAir = true; //trace("upReleasedInAir"); } if(doubleJumpReady && upReleasedInAir){ if(upPressed){ //and if the up arrow is pressed //trace("doubleJump!"); doubleJumpReady = false; ySpeed = jumpConstant; //set the y speed to the jump constant } } } if(keyCollected == false){ if(player.hitTestObject(back.doorKey)){ back.doorKey.visible = false; keyCollected = true; trace("key collected"); } } if(doorOpen == false){ if(keyCollected == true){ if(player.hitTestObject(back.lockedDoor)){ back.lockedDoor.gotoAndStop(2); doorOpen = true; trace("door open"); } } } if(xSpeed > maxSpeedConstant){ //moving right xSpeed = maxSpeedConstant; } else if(xSpeed < (maxSpeedConstant * -1)){ //moving left xSpeed = (maxSpeedConstant * -1); } xSpeed *= frictionConstant; ySpeed *= frictionConstant; if(Math.abs(xSpeed) < 0.5){ xSpeed = 0; } scrollX -= xSpeed; scrollY -= ySpeed; back.x = scrollX; back.y = scrollY; sky.x = scrollX * 0.2; sky.y = scrollY * 0.2; } function keyDownHandler(e:KeyboardEvent):void{ if(e.keyCode == Keyboard.LEFT){ leftPressed = true; } else if(e.keyCode == Keyboard.RIGHT){ rightPressed = true; } else if(e.keyCode == Keyboard.UP){ upPressed = true; } else if(e.keyCode == Keyboard.DOWN){ downPressed = true; } } function keyUpHandler(e:KeyboardEvent):void{ if(e.keyCode == Keyboard.LEFT){ leftPressed = false; } else if(e.keyCode == Keyboard.RIGHT){ rightPressed = false; } else if(e.keyCode == Keyboard.UP){ upPressed = false; } else if(e.keyCode == Keyboard.DOWN){ downPressed = false; } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM