简体   繁体   中英

Problems getting keyboard input in AS3

So I'm workin on a flash project where I want keyboard input. In the stage there's an instance "Car" seen from above which is supposed to be rotate and drive direction of rotation. This is what I've put together so far in AS3:

//Required stuff
    import flash.ui.Keyboard;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.display.Stage;
    import flash.display.MovieClip;

    Car.addEventListener(Event.ENTER_FRAME, this.RunGame);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
    stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

//Variables
    var keys:Array = []

var vDrive:Number = 3; //Car's current base speed
    var vx:Number = 0; //Speed along x axis
var vy:Number = 0; //Speed along y axis

var vMax:Number = 30; //Top speed
var vRot:Number = 3; //Rotation speed

var vAcc:Number = 1.1; //Factor for acceleration
var vDeAcc:Number = 0.90; //Factor for de-acceleration


//Game Loop
    RunGame();

function RunGame():void 
    {

   // Drive forwards
      if (keys[Keyboard.UP]) 
          {
          if (vDrive < vMax)
            vDrive += vAcc;
          }


       // Reverse
    if (keys[Keyboard.DOWN])
        {
        if (vDrive > vMax)
            vDrive *= vAcc;
        }

   // Turn right
    if (keys[Keyboard.RIGHT])
        {
        Car.rotation += vRot;
        }

   // Turn left venstre
    if (keys[Keyboard.LEFT])
        {
        Car.rotation -= vRot;
        }

   //Movement
        // Friction
            vDrive *= vDeAcc;

        //Calculating movement vector
            vx = vDrive * Math.cos(toRad(Car.rotation));
            vy = vDrive * Math.sin(toRad(Car.rotation));

        //Update car position
            Car.x -= vx ;
            Car.y -= vy;
    }

However, when I run the program, the arrow keys don't seem to do anything. I also get the following compiler warnings for both "onKeyDown" and "onKeyUp":

Migration issue: The onKeyDown event handler is not triggered automatically by Flash Player at run time in ActionScript 3.0. You must first register this handler for the event using addEventListener ( 'keyDown', callback_handler)

Trying to add what it suggested just makes errors saying callback_handler ain't defined. I'm now stuck trying to figure out how to make the keyboard input work. Anyone know?

You are currently missing the functions for the key listeners. You have added the listeners to the stage here:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

Now you just need to create the functions:

function onKeyDown( e:KeyboardEvent ):void {
    //add our key to the keys array
    keys[e.keyCode] = e.keyCode;
}

function onKeyUp( e:KeyboardEvent ):void {
    //if the key is in the keys array, set the value to null
    keys[e.keyCode] = null;
}

But there is another problem here:

Car.addEventListener(Event.ENTER_FRAME, this.RunGame);

You do not need the this.RunGame , just RunGame will do, but you should get an error this method needs a parameter of type Event , so your RunGame() definition should look like this:

function RunGame(e:Event):void

Then you wouldn't call RunGame() , it is called each frame while tied to the event listener.

Edit: Please note that there are many ways to handle key events, my answer will work with your current implementation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM