2014-03-05 2 views
0

그래서 키보드 입력을 원하는 곳에서 플래시 프로젝트를 진행하고 있습니다. 무대에는 회전하고 회전 방향을 결정해야하는 위에서 본 인스턴스 "차"가 있습니다. 이것은 내가 AS3에서 지금까지 조립 한 것입니다 : 그러나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; 
    } 

, 나는이 프로그램을 실행할 때, 화살표 키를 아무것도하지 않는 것. 는 또한 모두 "onKeyDown에"와 "onKeyUp에"에 대한 다음과 같은 컴파일러 경고를 얻을 :

마이그레이션 문제 : onKeyDown에 이벤트 핸들러 ActionScript 3.0에서는 런타임에 Flash Player에 의해 자동적으로 를 트리거되지 않습니다. 당신은 먼저 그냥 오류가 callback_handler이 정의되지 않은 말을하게 무엇을 제안 추가하려고하여 addEventListener ('를 keyDown', callback_handler)를 사용하여 이벤트

에 대해이 핸들러를 등록해야합니다. 키보드 입력 작업을 수행하는 방법을 알아 내려고했습니다. 누구 알아?

답변

0

현재 주요 수신기의 기능이 없습니다.

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

지금 당신은 단지 기능을 작성해야합니다 :

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; 
} 

을하지만, 여기에 또 다른 문제가있는 것입니다 :

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

당신은하지 않습니다 당신은 여기에 무대에 청취자를 추가 한 this.RunGame이 필요합니다. RunGame 만 수행 할 수 있지만이 메서드는 Event 유형의 매개 변수가 필요하므로 오류가 발생하므로 RunGame() 정의를 이 같은 LD 모양 : 당신이 RunGame()를 호출하지 것이다 그런 다음,이 이벤트 리스너에 묶여있는 동안 각 프레임

function RunGame(e:Event):void 

라고합니다.

편집 : 주요 사건을 처리 할 수있는 방법은 여러 가지가 있음을 유의하십시오. 내 대답은 현재 구현에 적용됩니다.