2017-04-19 12 views
0

나는 유휴, 걷기, 돌리기, 점프, 공격 및 춤과 같은 여러 가지 애니메이션이 포함 된 캐릭터 (myHero)가 있습니다. 지금 코드를 사용하면 전체 애니메이션이 작동하도록 버튼을 계속 눌러야합니다 (걷는 동안 괜찮 았지만 예를 들어 공격하려고 할 때 버튼을 한 번 누르고 전체 애니메이션도 한 번 재생 될 것입니다.) 지금부터 애니메이션을 재생하려면 버튼을 계속 눌러야합니다. 내가 키를 눌러하는 것을 계속해야이와ActionScript3.0 버튼을 누른 후 문자 애니메이션 중지

var keyRight:Boolean=false; 
var keyLeft:Boolean=false; 
var keyUp:Boolean=false; 
var keyAttack:Boolean=false; 
var keyDance:Boolean=false; 


myHero.gotoAndStop(1);//the idle animation 

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

    if(event.keyCode == Keyboard.X) 
    { 
     keyAttack=true; 
    } 
//theres more code for the other keys all similar to this 

} 

stage.addEventListener(KeyboardEvent.KEY_UP, keyUp_Handler) 
function keyUp_Handler(event:KeyboardEvent):void 
{ 

    if(event.keyCode == Keyboard.X) 
    { 
     myHero.gotoAndStop(1);//the idle animation 
     keyAttack=false; 
    } 
//theres more code for the other keys all similar to this 

} 

: 이 내 코드입니다.

if(event.keyCode == Keyboard.X) 
{ 
    if(myHero.Attack.currentFrame==8)//the animation is 8 frames long 
    { 
     myHero.gotoAndStop(1);//the idle animation 
     keyAttack=false; 
    } 
} 

을하지만 다른 키와 취소하지 않는 한 나는 키를 누르면 이제 애니메이션이 영원히 루프 : 그래서 keyDown_Hander에이 추가로했습니다. 또한 stop()을 추가하려고 시도했습니다. 애니메이션의 마지막 프레임으로 이동하지만 마지막 프레임에서 멈추고 원하는대로 유휴 상태로 돌아 가지 않습니다.

어떤 도움이 필요합니까?

+1

실제로 공격 애니메이션을 시작하는 방법이 명확하지 않습니다. (X를 누르고 아이들 프레임으로 가서'keyAttack'을'false '로 설정하십시오). 당신의 영웅의 구조를 분명히 해주세요. 당신의 아이 MovieClip이 Attack이라고 불리는 것 같습니다. – BadFeelingAboutThis

+0

myHero에는 다른 애니메이션이 포함 된 6 개의 서로 다른 키 프레임이 있습니다. 그래서 각각의 키 프레임은 다른 버튼으로 트리거됩니다. 나는 열쇠가 눌려 졌을 때 그것이 진실이고 그것이 눌려지지 않았을 때 그것이 거짓이되도록 불리언을 설정했습니다. – DJmangoLORD

+0

그는 애니메이션 상태를 처리하기 위해 무언가를 원한다고 생각합니다. 공격 어택 애니메이션 -> 어택 애니메이션이 끝났을 때 -> 유휴 재생 – Nambew

답변

0

누르기 및 놓기를 원하는 키보드 키에 대해 수행 할 수있는 옵션 중 하나는 부울 값을 설정하고 유휴 프레임으로 이동하지 말라는 것입니다. 따라서 공격 키의 경우 keyAttack 부울을 false로 설정하십시오.

stage.addEventListener(KeyboardEvent.KEY_UP, keyUp_Handler) 
function keyUp_Handler(event:KeyboardEvent):void 
{ 

    if(event.keyCode == Keyboard.X) 
    { 
     keyAttack=false; 
    } 
//theres more code for the other keys all similar to this 

} 

그런 다음 애니메이션 (무비 클립)에 당신은 부울이 false 인 경우 체크 공격의 8 프레임의 끝 부분에 대한 코드의 조각을 가질 수 있습니다. Attack 애니메이션은 위 예제 텍스트에서 myHero라는 MovieClip 안에 있다고 가정합니다.

// At the last frame of the attack animation inside myHero.Attack 
if (MovieClip(this.parent.parent).keyAttack == false){ 
    // Assumming that this.parent = myHero 
    // and this.parent.parent = the main stage where keyAttack varable lives 
    MovieClip(this.parent).gotoAndStop(1); // though I would use a frame label called ("idle") 
} else { 
    this.gotoAndPlay(1); // replay attack animation assuming that the X key is still pressed down 
} 
+0

잘 모르겠지만 어택 애니메이션을 시작하는 방법은 코드에서 어택 애니메이션이 예제에서 재생하도록 지시하지 않기 때문입니다. 또한 이것은 한 번의 누름으로 완성 된 애니메이션이 완성 될 때까지 재생되게하려는 키를위한 것임을 상기시켜줍니다. – kminke

+0

@kminke 답장을 보내 주셔서 감사합니다! 나는 프로그램에 코드를 넣었으나 지금은 오류가 발생한다 (참조 정적 유형 flash.display : Stage를 통해 정의되지 않은 속성 keyAttack에 대한 액세스가 1119).이 행은 강조 표시됩니다. if (stage.keyAttack == false) ; 나는 AS3에 비교적 익숙하기 때문에 모든 것이 제 눈에 혼란 스럽습니다. 하하 – DJmangoLORD

+0

코드 샘플에서 변수가 주요 타임 라인에 설정되었다고 가정했습니다. 어떤 객체에 keyAttack Boolean 변수가 설정되어 있습니까? – kminke