2013-03-17 3 views
0

시작하는 게임에서 KeyboardEvent를 사용하는 데 문제가 있습니다.Flash에서 KeyboardEvent가 작동하지 않습니다.

수준

import flash.display.MovieClip; 
import flash.events.Event; 

public class Fase extends Cena 
{ 
    var avatar:Avatar; 

    public function Fase() 
    { 
     // constructor code 
     this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 
    } 

    public function onAdded(e:Event) 
    { 
     avatar = new Avatar(); 
     this.addChild(avatar); 
     avatar.x = stage.width/2; 
     avatar.y = 30; 

    } 

    public function die() 
    { 
     this.removeEventListener(Event.ADDED_TO_STAGE, onAdded); 
     (this.parent as ScreenHandler).removeChild(this); 
    } 

} 

아바타 내가 가진

public class Avatar extends MovieClip 
{ 

    public function Avatar() 
    { 
     // constructor code 
     this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 
    } 

    public function onAdded(e:Event) 
    { 
     //stage.focus=this; 
     this.addEventListener(KeyboardEvent.KEY_DOWN, apertou); 
    } 

    public function apertou(event:KeyboardEvent) 
    { 
     trace("o"); 
     if(event.keyCode == Keyboard.LEFT) 
     { 
      this.x++; 
     } 
    } 

} 

: 나는 아바타를 대표하는 세 개의 클래스, 레벨을 처리하기위한 하나, 실제 레벨 하나 하나가 아바타에서 stage.focus = this를 사용하면 두 클래스의 모든 패키지가 모두 작동하지만 게임 실행 중에 다른 곳을 클릭하면 포커스가 사라지고 더 이상 작동하지 않습니다. 누구든지 나를 도울 수 있습니까?

미리 감사

답변

1

키보드 이벤트는 할당 된 객체가 현재 포커스 인 경우에만 트리거됩니다.

다행히도 stage에는 기본적으로 포커스가 있습니다. 이것은 당신이 항상 예상대로 키보드 이벤트가 트리거 가지고 무대에 이벤트 리스너를 추가 할 수 있습니다 의미 : 당신의 대답에 대한

stage.addEventListener(KeyboardEvent.KEY_DOWN, apertou); 
+0

Marty 님, 고맙습니다! =) –

0

에서 당신은 레벨 또는 단계로 아바타에서 키 핸들러를 이동할 수 있습니다 다음, 거기에 자신의 아바타를 이동합니다.

public class Fase extends Cena 
{ 
    var avatar:Avatar; 

    public function Fase() 
    { 
     // constructor code 
     this.addEventListener(Event.ADDED_TO_STAGE, onAdded); 
    } 

    public function onAdded(e:Event) 
    { 
     avatar = new Avatar(); 
     this.addChild(avatar); 
     avatar.x = stage.width/2; 
     avatar.y = 30; 
     addEventListener(KeyboardEvent.KEY_DOWN, apertou); 

    } 

    public function die() 
    { 
     this.removeEventListener(Event.ADDED_TO_STAGE, onAdded); 
     (this.parent as ScreenHandler).removeChild(this); 
    } 

    public function apertou(event:KeyboardEvent) 
    { 
     if(event.keyCode == Keyboard.LEFT) 
     { 
      avatar.x++; 
     } 
    } 

} 
+0

감사합니다,하지만 여전히 그것은 단지 키보드 코드가 클래스에있는 것은 Stage.focus와 함께 작동 . –

관련 문제