0

저는 게임 프로그래밍 과정에서 DDR 게임을하고 있으며 마우스를 사용하여 화살표를 얻을 수있었습니다. 그러나 요구 사항은 키보드를 사용하여 작동하도록하는 것입니다. 키보드를 사용하여 정확하게 작동시킬 수는 없습니다.AS3 MouseEvent를 KeyboardEvent로 변환

여기 내 소스 코드입니다. MouseEvent를 위, 아래, 왼쪽, 오른쪽 버튼에 대해 KeyboardEvents를 사용하여 변환하려면 어떻게해야합니까?

import flash.events.KeyboardEvent; 
import flash.display.MovieClip; 
import flashx.textLayout.operations.ModifyInlineGraphicOperation; 
import flash.events.MouseEvent; 
import flash.events.Event; 
import flash.net.URLRequest; 
import flash.media.Sound; 
import flash.media.SoundChannel; 

var pattern = new Array(); 
var buttons = new Array(); 
buttons.push(up, bottom, left, right); 
var position = 0; 
var playersTurn = false; 
var mc_starttext:MovieClip; 
var mc_background:MovieClip; 

//generate the pattern 
setTimeout(nextMove, 1000); // call after 1 second 

// Expecting click from they keyboard 

up.addEventListener(MouseEvent.CLICK, clicked); 
bottom.addEventListener(MouseEvent.CLICK, clicked); 
left.addEventListener(MouseEvent.CLICK, clicked); 
right.addEventListener(MouseEvent.CLICK, clicked); 

stage.addEventListener(KeyboardEvent.KEY_DOWN, onkeyPress); 
stage.addEventListener(KeyboardEvent.KEY_UP, onkeyRelease); 


mc_starttext.buttonMode = true; 
mc_starttext.addEventListener(MouseEvent.CLICK, startClick) 
mc_background.buttonMode = true; 
mc_background.addEventListener(MouseEvent.CLICK, startClick) 


function startClick(e:MouseEvent):void{ 
      dispatchEvent(new Event("START_GAME")); 
     } 

function hideScreen():void{ 
      this.visible = false; 
     } 

function showScreen():void{ 
      this.visible = true; 
     } 

function onkeyPress(event:KeyboardEvent):void{ 

    if (event.keyCode == 13)//enter 
       { 
        this.mc_background.visible = false 
        this.mc_starttext.visible = false 
        //this.StartCover.visible = false; 
        //this.StartText.visible = false; 

        //this.score.text = position.toString(); 
        //this.score.visible = true; 

        //startPlay = true; 
        setTimeout(nextMove, 2000);//Call nextmove after two second 

       } 

    if (event.keyCode == 32) 
    { 
     trace("space bar"); 
    } 
} 

function onkeyRelease(event:KeyboardEvent):void{ 
    if (event.keyCode == 32){ 
     trace("space release"); 
    } 
} 

function clicked(clickInfo:MouseEvent){ 

    if(!playersTurn) return; 

    if (clickInfo.target == pattern[position]){ 
     trace("right"); 
     position = position + 1; 
     //Check to see if it is computers turn 
     if (position == pattern.length){ 
      //CPUs turn 
      position = 0; 
      setTimeout(nextMove, 1000) 
     } 
     // play button animation 
     clickInfo.target.gotoAndPlay(2); 
    } else { 
     trace("wrong"); 
    } 

} 

function nextMove(){ 

    if (position < pattern.length){ 
     pattern[position].play(); 
     position++; 
     setTimeout(nextMove, 1000); 
    } else { 
     // Generate random number 
     var randomNumber = Math.floor(Math.random()*4); 
     pattern.push(buttons[randomNumber]); 
     buttons[randomNumber].play(); 
     playersTurn = true; 
     position = 0; 
    } 
} 
+0

지금 해결 되었습니까? 아니면 마우스와 키보드 모두에 하나의 기능을 연결해야합니까? –

+0

나는 실제로 그것을 아직 풀 수 없었다! 그것은 월요일에 만기가되고 내가 붙어 있었기 때문에 나는 다른 코스에서 일하고 있었다. 마우스와 키보드 모두에서 작동하도록하는 방법을 알 수 없었습니다. @ VC.One – DaveTheCoder

답변

0

이 데모 코드가 하나의 함수를 사용하여 KeyboardMouse 이벤트를 처리하는 방법을 이해하는 데 도움이되는지 확인하십시오.

그냥
  • 는 사각형 모양 (스테이지에서 그리거나 코드에 의해 생성) 확인 ...하여 테스트합니다.

그런 다음 아래 코드를 추가 상자 :


  • 은 그것의 인스턴스 이름을 지정합니다. 그것은 자명하지만 필요한 것은 무엇이든 묻습니다. 희망이 도움이됩니다.

    //variable "box" is a rectangle on Stage with instance name "box" 
    
    //# Both Mouse & Keyboard events point to one "control_Move" function 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, control_Move); 
    box.addEventListener(MouseEvent.CLICK, control_Move); 
    
    //# Make function of generic-ish Event type 
    function control_Move (evt:Event) : void 
    { 
        //trace ("evt.type : " + evt.type); 
    
        if (evt.type == "click") //# If mouse clicked 
        { 
         //# If click target is "box" then move "box" forward +5 pixels 
         if (evt.target.name == "box") { box.x += 5; } 
    
        } 
    
        if (evt.type == "keyDown") //# If keyboard pressed 
        { 
         //# LEFT ARROW KEY 
         if (KeyboardEvent(evt).keyCode == 37) { box.x -= 5; } 
    
         //# RIGHT ARROW KEY 
         if (KeyboardEvent(evt).keyCode == 39) { box.x += 5; } 
    
        } 
    
    } 
    
  • +0

    감사합니다. 방금 뛰었고 당신이 말한 것처럼 효과가 있습니다. 나는이 지식을 취하여 그것을하기 위해 필요한 것을하기 위해 그것을 구현할 것입니다! 정말 도움을 주셔서 감사합니다! @ VC.One – DaveTheCoder

    3

    쉬운. 키 코드에 대한 그 기능 추가 '하면'문 테스트 내

    onkeyPress(e) 
        { 
    
        } 
    

    , 예를 들면 : 당신이 이미 KeyboardEvent.KEY_DOWN 수신기를 가지고 있기 때문에, 함수 만들기

    if(e.keyCode == 37)  //this is the code for the left arrow key 
        { 
    
    
        } 
    

    그런 다음 프로그램을 말해 무엇 그 키를 누를 때 당신은 그것을 원한다.

    혼자서 나머지를 파악할 수 있어야합니다.

    +0

    고마워요! 말이된다! – DaveTheCoder

    +0

    내 질문에 분명하지 않은 것 같아요,하지만 이전에 이런 짓을했는데, 내 버튼 (위, 아래, 오른쪽, 왼쪽)을 클릭 한 함수로 전송되는 MouseEvents로 설정 한 것처럼, 키보드 이벤트로 작동하도록 변경 하시겠습니까? 나는 이것에 대해 좀 익숙해 져서 up.addEventListener (KeyboardEvent.KEY_DOWN, onKeyPress); @Craig 일하지 않을거야 – DaveTheCoder

    +0

    나는 너를 아주 잘 이해하지 못한다. DaveTheCoder. 버튼 객체 또는 MovieClip 객체가 어떻게 키보드 이벤트를 전달할 수 있는지 묻고 있습니까? – Craig