2012-02-17 10 views
0

좋아, 그래서 나는 "남자"로 인스턴스화 된 무비 클립을 가지고 있으므로 그와 같이 Idle 및 Walk 프레임을 갖도록 만들었습니다. 그는 또한 왼쪽/오른쪽으로 이동할 수 있습니다. (나는 또한 그를 공격하게 만들었지 만 그것은 부적절하다.);as3로 이동하는 동안 애니메이션 보행

[대기] [[] 마지막 프레임은 내가 "유휴"로 돌아가 다음 왼쪽/오른쪽 키를 올려 때까지

gotoAndPlay("walk"); 

내가 "산책"프레임을 통해 루프 필요가 도보 위치. 루프를 한 번 통과하고 열쇠를 들지 않은 경우에도 유휴 상태가되는 것입니다. 이것은 내 코드

 var leftKeyDown:Boolean = false; 
     var upKeyDown:Boolean = false; 
     var rightKeyDown:Boolean = false; 
     var downKeyDown:Boolean = false; 
     var charSpeed:Number = 7; 
     man.addEventListener(Event.ENTER_FRAME, moveChar); 
    function moveChar(event:Event):void{ 
    if(leftKeyDown || rightKeyDown) 
{ 
    man.gotoAndPlay("walk"); 
} 


if(rightKeyDown) 
{ 
    man.x += charSpeed; 
    man.scaleX=1; 
} 
if(leftKeyDown) 
{ 
    man.x -= charSpeed; 
    man.scaleX=-1; 
} 

      } 


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

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


      } 

      if(event.keyCode == 38 || event.keyCode == 87){ 
       upKeyDown = true; 
      } 
      if(event.keyCode == 39 || event.keyCode == 68){ 
       rightKeyDown = true; 
        } 
      if(event.keyCode == 40 || event.keyCode == 83){ 
       downKeyDown = true; 
      } 

     } 



     // checking for upkeys 
    stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp); 
function checkKeysUp(event:KeyboardEvent):void{ 
    if(event.keyCode == 37 || event.keyCode == 65){ 
     leftKeyDown = false; 
     man.gotoAndStop("idle"); 
    } 
    if(event.keyCode == 38 || event.keyCode == 87){ 
     upKeyDown = false; 

    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = false; 
     man.gotoAndStop("idle"); 
    } 
    if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = false; 

    } 
} 

감사

답변

2

if 문이 전달 된 후 함수를 종료하고 다른 모든 명령이 실패하면 유휴 상태입니다.

if(leftKeyDown){ 
    man.x -= charSpeed; 
    man.scaleX=-1; 
    man.gotoAndPlay("walk"); 
    return; 
} 
if(rightKeyDown){ 
    man.x += charSpeed; 
    man.scaleX=1; 
    man.gotoAndPlay("walk"); 
    return; 
} 

man.gotoAndStop("idle"); 

또는 다른 측면을

switch(true){ 
    case leftKeyDow: 
     man.x -= charSpeed; 
     man.scaleX=-1; 
     man.gotoAndPlay("walk"); 
     break; 
    case rightKeyDown: 
     man.x += charSpeed; 
     man.scaleX=1; 
     man.gotoAndPlay("walk"); 
     break; 
    default: 
     man.gotoAndStop("idle"); 
} 
+0

작동하지 않습니다 매우 필요하다 생각하지 않습니다. – thor625

+0

만약 내가 play(); 하지만 gottoAndPlay()가 필요합니다. 나는 또한 공격 애니메이션을해야하기 때문에 – thor625

+0

그 문제는이 질문과 관련이 없습니다. –

0

bliting를 사용해보십시오입니다. 그것을하는 법을 배우기 위하여 몇몇 위치는 여기에서있다.

http://www.gotoandlearn.com/play.php?id=140< - 이것은 좋은 것입니다! http://www.adobe.com/devnet/flash/articles/blitting_mc.html

http://blog.flexwiz.net/spritesheet-animation-in-as3/

당신은 또한 당신의 블릿/스프라이트 시트를 만들 수 TexturePacker를 사용할 수

http://www.gotoandlearn.com/play.php?id=147.

http://www.texturepacker.com/

나는 많은 프로젝트에서 그것을 사용하고 그것이 내가 볼

+0

를 원한다면 나는이 – thor625

0

하나 개에 문제가있는 경우/다른 문입니다 시간의 톤을 절약 할 수 있습니다.

현재 오른쪽 키가 눌러져 있으면 왼쪽 키가 눌러져 있지 않아도 유휴 애니메이션이 호출됩니다. 이 같은 변경해야합니다 :

또한
if(leftKeyDown || rightKeyDown) 
{ 
    man.gotoAndPlay("walk"); 
} 
else 
{ 
    man.gotoAndStop("idle"); 
} 

if(rightKeyDown) 
{ 
    man.x += charSpeed; 
    man.scaleX=1; 
} 
if(leftKeyDown) 
{ 
    man.x -= charSpeed; 
    man.scaleX=-1; 
} 

당신이 끝까지 재생을 방지하기 위해 도보 및 유휴 애니메이션의 끝에 애니메이션 루프에서 stop(); 전화를 가지고 있는지 확인하십시오.

+0

여전히 프레임을 "걸어"간다하지만 이후 재생되지 않습니다 – thor625

관련 문제