2013-02-18 3 views
0

저는 AS3에서 정말로 새로 왔습니다. AS2에서 코딩하는 데 익숙했지만, 1 년 넘게 Flash 나 ActionScript를 사용하지 않았습니다. 왼쪽 또는 오른쪽 화살표를 누르면 캐릭터가 오른쪽으로 이동하고 왼쪽으로 이동하면 애니메이션이 첫 번째 프레임에서 멈추게됩니다. 유휴 애니메이션은 정상적으로 작동하지만 버튼을 누를 때마다 프레임 1에서 보행 애니메이션이 시작되고 중지됩니다.AS3 애니메이션 프레임 1에서 멈춤

vector.gotoAndPlay("parado"); 

var leftKeyDown:Boolean = false; 
var rightKeyDown:Boolean = false; 
var mainSpeed:Number = 7; 

vector.addEventListener(Event.ENTER_FRAME, moveChar); 
function moveChar(event:Event):void{ 

    if(leftKeyDown){ 
     if(vector.currentLabel!="andando"){ 
      vector.x -= mainSpeed; 
      vector.scaleX=-1; 
      vector.gotoAndPlay("andando"); 
     } 
    } else { 
     if(rightKeyDown){ 
      if(vector.currentLabel!="andando") { 
       vector.x += mainSpeed; 
       vector.scaleX=1; 
       vector.gotoAndPlay("andando"); 
      } 
     } 
    } 
} 

stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown); 
function checkKeysDown(event:KeyboardEvent):void{ 

    if(event.keyCode == 37){ 
     leftKeyDown = true; 
    } 

    if(event.keyCode == 39){ 
     rightKeyDown = true; 
    } 
    } 
    stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp); 
    function checkKeysUp(event:KeyboardEvent):void{ 

    if(event.keyCode == 37){ 
     leftKeyDown = false; 
    } 
    if(event.keyCode == 39){ 
     rightKeyDown = false; 
    } 
} 

FYI : "parado"는 내 유휴 애니메이션이고 "andando"는 내 도보 애니메이션입니다.

답변

3

프레임 1에서는 멈추지 않고 항상 프레임 1로 되돌아갑니다. 당신은 몇 초 동안 버튼을 누르고 있으면 무슨 생각해 거짓으로

  • rightKeyDown 시작됩니다. 해당 분기에는 코드가 실행되지 않습니다.

  • 사용자 rightKeyDown는 사실

  • moverChar 검사 rightKeyDown이되는 것이 사실보고 문자에 "andando"를 전송, 오른쪽 화살표를 보유하고 있습니다.

  • moveChar이 다시 실행되면 rightKeyDown이 참이지만 문자는 여전히 "andando"프레임에 있으므로 아무 작업도 수행하지 않습니다.

  • "andando"다음의 프레임으로 이동합니다.

  • moverChar 실행 중임 : rightKeyDown은 여전히 ​​true이지만 프레임이 더 이상 "andando"가 아니므로 다시 설정됩니다.

그리고는 사용자가 키를 누른 채 모든 시간 동안 반복, 그래서이 문제를 해결하기 위해 프레임 1, 2 개

몇 가지 대안에 갇혀있는 것으로 보인다 :


사용자가 단추를 누르거나 놓을 때만 키 프레임을 변경하십시오. 중간에있는 모든 프레임이 아니라 키 프레임을 변경하십시오.

function moveChar(event:Event):void{ 

    if(leftKeyDown){ 
     vector.x -= mainSpeed; 
     // No frame checks or frame changes here. 
    } 
    [...] 

function checkKeysDown(event:KeyboardEvent):void{ 
    if(event.keyCode == 37){ 
     leftKeyDown = true; 
     vector.scaleX=-1; 
     vector.gotoAndPlay("andando"); 
     // Send the character to the correct frame when the user presses the key. 
    } 
    [...] 

function checkKeysUp(event:KeyboardEvent):void{ 
    if(event.keyCode == 37){ 
     leftKeyDown = false; 
     vector.gotoAndPlay("parado"); 
     // Send it back to idle when the user releases the key. 
    } 
    [...] 

또 다른 옵션은 그 자체로 무비 클립의 각 애니메이션을 저장하고 컨테이너 무비 클립에 넣어하는 것입니다. 따라서 캐릭터의 심볼에는 유휴 애니메이션과 걷기 애니메이션을위한 두 개의 프레임 만 있습니다. 코드에서 gotoAndPlay 대신 gotoAndStop을 사용하므로 모든 프레임이 호출되는지는 중요하지 않습니다.


편집 : 조건을 그룹화하십시오.

} else { 
    if(rightKeyDown){ 
     if(vector.currentLabel!="andando") { 
      vector.x += mainSpeed; 
      vector.scaleX=1; 
      vector.gotoAndPlay("andando"); 
     } 
    } 
} 

} else if (rightKeyDown && vector.currentLabel != "andando"){ 
    vector.x += mainSpeed; 
    vector.scaleX=1; 
    vector.gotoAndPlay("andando"); 
} 
+0

감사합니다, 사람으로 다시 작성할 수 있습니다. 지금은 잘 작동합니다. 정말이 문제에 갇혀있었습니다. 하지만 절 구해줘, 고마워! – CptAwesome

관련 문제