2016-07-19 3 views
-3

걷는 애니메이션을위한 프레임으로 변경하고 싶습니다. 3 프레임 있습니다. 첫 번째 (플레이어 클래스) 내 다른 파일에 따라서도}Non tween as3의 애니메이션 (액션 스크립트 3)

package { 

import flash.display.MovieClip; 
import flash.events.KeyboardEvent; 
import flash.events.Event; 
import flash.ui.Keyboard; 

public class main extends MovieClip { 
    var player:Player = new Player(); 

    var px = 0; 
    var py = 0; 

    public function main() { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed); 
     addEventListener(Event.ENTER_FRAME, update); 
    } 
    public function KeyPressed(e:KeyboardEvent):void { 
     //trace(e.keyCode); 
     trace(px); 
     if(e.keyCode == 38 || e.keyCode == 87) { 
      trace('w/up'); 
      py -= 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 39 || e.keyCode == 68) { 
      trace('d/right'); 
      px += 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 37 || e.keyCode == 65) { 
      trace('a/left'); 
      px -= 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 40 || e.keyCode == 83) { 
      trace('s/down'); 
      py += 5; 
      moveAnimation(); 
     } 
    } 
    public function moveAnimation():void { 
     player.gotoAndStop(2); 
     player.gotoAndStop(3); 
     player.gotoAndStop(1); 
    } 
    public function update(e:Event):void { 
     addChild(player); 
     player.x = px; 
     player.y = py; 
    } 
} 

여전히

정상입니다 두 번째와 세 번째)은 (내가 정지를 추가 2 도보 프레임이다; 도움이된다면. 그러나 그것은 움직인다. 호출 함수는 두 번째 또는 세 번째 프레임과 같이 움직이지만, 단지 1 번만 움직입니다. 한 프레임 만 불려오고 붙어 있습니다.

편집 : keyup 이벤트 리스너와 stopAnimation()으로 고정했지만 키가 HELD 일 때 작동하지 않습니다. 그것은 단지 1 프레임에서 너무 많이 호출되는 원인이됩니다. 키가 먼저 눌 렸을 때만 어떻게 만들 수 있습니까?

+0

편집 : keyup 이벤트 리스너 및 stopAnimation()으로 수정했지만 키가 HELD 일 때 작동하지 않습니다 – Artsicle

+0

질문에 정보를 추가하지 말고 질문을 포함하고 포함 시키십시오. – null

+0

당신은 대답 할 것인가 말 것인가? – Artsicle

답변

0

Player 클래스를 변경하여 상태 (왼발 걷기, 오른쪽 걷기, 서있는 상태)에 따라 고유 한 애니메이션을 제어해야합니다. 이해할 수 있듯이 걷는 애니메이션을 나타내는 프레임이 2 개 (# 2 및 # 3)이므로 캐릭터가 걷는 동안 두 개를 번갈아 가며해야합니다. PlayerscaleX 속성으로 향해야합니다. 그렇게하려면 Player 클래스에 세 가지 기능을 부여한 다음 적절한 시간에 호출하십시오.

public class Player extends MovieClip { 
    private var moving:Boolean=false; 
    public function Player() { 
     addEventListener(Event.ENTER_FRAME,update); 
     stop(); // just in case 
    } 
    function moveLeft():void { 
     this.scaleX=-1; 
     this.moving=true; 
    } 
    function moveRight():void { 
     this.scaleX=1; 
     this.moving=true; 
    } 
    function standStill():void { // stop() is defined in MovieClip 
     this.moving=false; 
    } 
    private function update(e:Event):void { 
     if (this.moving) { 
      if (this.currentFrame==3) { // change this if you have longer walk animation 
       gotoAndStop(2); 
      } else { 
       nextFrame(); 
      } // faking animation loop with enterframe listener 
     } else { 
      gotoAndStop(1); // display stand still 
     } 
    } 
} 

그런 다음 당신은 당신의 청중에 player.moveLeft() 등을 호출 할 때, 그리고 너무 player.standStill()를 호출 할 때를 결정합니다.

+0

나는 이미 그것을 고쳤습니다 :) – Artsicle

+0

다른 곳에서 "작동하지 않으면"거의 수정되지 않았습니다. – Vesper

+0

수정 사항 : P – Artsicle

관련 문제