2010-01-20 8 views
6

내 영화 클립이 한 번 재생되고 마지막 프레임에서 멈추기를 원합니다. 내 movieclip 클래스의 루프에서 다음 코드를 사용합니다. (이것은 as3 임)마지막 프레임에서 멈춤 (플래시)

if(currentFrame == 120) 
stop(); 

120은 마지막 프레임입니다. 한 번 재생됩니다. 하지만 문제는 다시 프레임 1로 돌아갑니다. 특정 프레임에서 동영상 클립을 중지하는 더 좋은 방법이 있습니다.

+1

정답을 찾으셨습니까? 그렇다면 정확하게 표시하십시오. –

답변

1

개체가 두 번 호출 되었기 때문입니다.

3

타임 라인에서 끝 부분에 키 프레임을 놓고 여기에 stop(); 메서드를 추가 할 수 있습니다. 해당 프레임에 도달하면 stop(); 메서드가 실행되고 클립이 중지됩니다.

당신이 타임 라인을 사용하고 있다고 가정하고 자신이 생각하는 것처럼 들린다. 가 켜져 나는 그래서이 기능은 화재 및 프레임을 확인할 것 모든 프레임에 (액션 스크립트 3) 이벤트 리스너를 추가

addEventListener(Event.ENTER_FRAME, function(e:Event){ 
    if(currentFrame == totalFrames){ 
     stop(); 
     removeEventListener(event.type, arguments.callee); 
    } 
}); 

:

+0

무비 클립에 첨부 된 사용자 정의 클래스를 사용하고 있습니다. 나는 거기에서 그것을하고 싶습니다. 그러나 만약 내가 기울이지 않으면, 나는 당신의 해결책으로 해결해야만 할 것이라고 생각합니다. – numerical25

+0

나는 그것에게 노력을 줬다. 그리고 그것은 일을 didnt한다. 그것은 여전히 ​​프레임 1에서 다시 시작되었습니다. 나는 currentFrame을 추적했다. 그것이 1로 돌아 간다는 것을 보여줍니다. – numerical25

+0

글쎄, 이것은 다른 일이 일어나고 있음을 의미합니다. 애니메이션을 만들기 위해 중첩 된 MovieClips로 작업하고 있습니까? 그들은 올바르게 멈추고 있습니까? 아마도 물건을 설치하는 방법에 대해 더 많은 것을 공유 할 수 있다면이를 추적하는 데 도움을 줄 수 있습니다. –

0

이것은 당신이 찾고있는의 라인을 따라 더 많은 것 . 그것이 마지막 프레임이라면 멈출 것입니다. 귀하의 예제를 기반으로 나는 당신이 MovieClip을 확장하는 클래스를 가지고 있다고 가정합니다.

+1

이 방법이 효과적 일 수는 있지만 성능 측면에서는 매우 좋지 않습니다. 이 enterframe은 이후에 계속 발사 될 것이며, 그것을 청소할 방법이 없습니다. 이와 비슷한 더 나은 동적 솔루션은 addFrameScript 메소드를 사용하는 것입니다. 물론 함수에 대한 참조가 있다면,이를 정리할 수 있습니다. 그러면 괜찮을 것입니다. –

+0

타일러와 동의합니다. 익명 함수는 gc'ed되기 전에 훨씬 오래 동안 메모리에 앉아 있기 때문에 나쁘다. – alecmce

+0

그래서 나는 timeLine의 stop() 함수가 갈 길이라고 생각한다. ??. 실제로 모든 영화 클립에 단일 루프를 사용하고 있으므로 이벤트 리스너에없는 경우 선호합니다. 응답 녀석을위한 감사합니다 – numerical25

0

지저분한 생각에서 문제가 내 stop() 함수에 응답하지 않는 플래시와 관련이 없다는 것을 알고 있습니다. 플래시가 무비 클립을 두 번 호출하는 것과 관련이 있다고 생각합니다. 다른 하나의 위에. 그것이 다시 시작된 것처럼 보이게 만듭니다. 나는 잘 모르겠다. 영화 클립을 다른 곳으로 호출하면 작동합니다. 그냥 내 루프에 없습니다. 나는 흔적을 그렸고 흔적은 한 번 나타났습니다.

12

actionscript로 처리하고 타임 라인의 마지막 프레임에 stop()을 수동으로 추가하지 않으려면 문서화되지 않은 addFrameScript() 메소드를 사용할 수 있습니다.

mc.addFrameScript(mc.totalFrames - 1, function():void 
{ 
    mc.stop(); 
}); 

함수의 범위를 기억할 수 있지만) mc.stop를 (사용하거나 중지 할 수 있습니다().

* 편집-추가 -1 addFrameScript의 첫 번째 매개 변수에, 그것을 기반으로 제로이기 때문에 (그래서 당신은 9을 둘 것입니다 프레임 10에 프레임 스크립트를 넣어).

+0

당신은 생명의 은인입니다! 타임 라인에 정지 점을 추가하고 필요할 때만 play()를 호출하는 것에 대해서 생각조차하지 않았습니다. –

0

알아 냈습니다. 솔직히 내 응용 프로그램에 결함이있는 것 같습니다. 그것은 기적적으로 일했고 나는 아무것도하지 않았다. 내 루프에서 나는 if (currentframe == totalframes)를했고, 전에는 전혀 일어나지 않았던 것이 이제는 완벽하게 일어난다. 나는 이유를 모른다. 하지만 내가 말했듯이, 때로는 컨스트럭터를 통해 가치를 전달하는 문제가 있기 때문에 소프트웨어 문제 일 수 있습니다. 그리고 이러한 값을 받아들이는 특별한 방법을 만들어야합니다.

3

가장 쉬운 방법 :

  1. 그냥 타임 라인의 마지막 프레임을 선택합니다. 작업 창 (F8)을 엽니 다. 선택한 프레임이 선택되어 있는지 확인한 다음, 선택되지 않은 경우에는 작업 창이 열려있는 동안 다시 선택하십시오.
  2. 선택한 후 'Action-Frame'창에 간단한 stop() 함수를 추가하십시오.

    //add the following line to the actions pane of the last frame. 
    stop(); 
    
  3. 끝났습니다. 필요할 경우 재생 단추를 선택적으로 추가 할 수 있습니다.

+0

사용자 정의 클래스로 해결되지 않는 경우 – Sagar

+1

어떤 도구를 사용하는지 모르지만 Adobe Flash를 사용한 것처럼 보입니다. Adobe Flash CS6을 사용하는 경우 액션 패널 열기 (F8)가 잘못되었습니다. 열기는 액션 패널 (F9)입니다. – kongkea

관련 문제