2011-08-17 5 views
2

제 컨트롤을 할 수없는 이유 때문에 현재 숫자 프레임 레이블이있는 일련의 플래시 파일을 작업하고 있습니다. Flash에서는 gotoAndPlay/gotoAndStop을 사용할 때 정수와 동일한 문자열을 처리하기 때문에 문제가 발생합니다.gotoAndPlay/gotoAndStop이 숫자 프레임 레이블로 작동하지 않습니다.

스크린 샷 :

예를 들어

screenshot

, gotoAndPlay('96') 실제로 대신 프레임 번호 96에서 gotoAndPlay 것 ", 96"의 레이블 프레임을 고토되지 않습니다.

지금 당장은 각 레이블이 어느 프레임에 있는지를 직접 알아내는 것이 유일한 해결책 인 것 같습니다. gotoAndPlay('96') 대신 gotoAndPlay(718)을 사용합니다. 분명히, 이것은 지루할 것입니다 (프레임 레이블이 많이 있습니다). 그리고 편집 할 때 물건을 옮겨야한다면 프레임 번호를 변경해야 할 것입니다.

아이디어가 있으십니까? 내가 간과 한 숫자 프레임 레이블에서 gotAndPlay/Stop을 강제로 강제 실행 할 수 있습니까?

답변

6

저에게 Flash Player 버그 (또는 적어도 디자인 결함)가있는 것 같습니다. 하지만 FrameLabel 개체 배열을 제공하는 MovieClip에 currentLabels 속성을 사용할 수 있어야합니다. 그런 다음이를 사용하여 프레임 레이블 숫자 문자열과 실제 프레임 번호 사이에 고유 한 매핑을 만듭니다.

var label : FrameLabel; 
var mapping : Object = {}; 

// Create a mapping between frame label string (regardless of semantics) 
// and the frame number that it corresponds to. 
for each (label in myMovieClip.currentLabels) { 
    mapping[label.name] = label.frame; 
} 


/** 
* Your own version of gotoAndPlay for labels, which will look into your 
* recently created mapping and play the right frame (by number) for the 
* given frame label. 
*/ 
function gotoAndPlayLabel(label : String) : void 
{ 
    myMovieClip.gotoAndPlay(mapping[label]); 
} 

당신은 다음의 레이블로 프레임을로 이동 (플레이)에 자신의 gotoAndPlayLabel() 기능을 사용 :

여기에 내가 무슨 말의 몇 가지 예제 코드입니다.

+0

이것은 내게 결점이있는 것처럼 보입니다. 레이블은 식별자이며 유효한 식별자 만 허용되어야합니다 (예를 들어, 변수의 이름 지정과 같은 규칙에 따라 이름을 지정해야합니다). IDE는 숫자 레이블을 허용하지 않아야합니다. –

+0

위대한 솔루션, 고마워! (.currentLabels는 .frameLabels가 아닙니다.) 나는 또한 내가 항상 currentLabels이 플레이 헤드 위치에 현재 framelabels의 배열을 반환했다고 잘못 판단했다고 깨달았습니다. 사실이 메서드는 장면의 모든 레이블 목록을 반환합니다. – producerism

+0

좋은 캐치 프로듀서 니즘. 내 답변을 업데이트했습니다! @ Juan Pablo : Flash Player API의 디자인 결함입니다. 문제는 (고대의) gotoAndPlay() 메소드가 엄격한 타이핑을 시행하지 않고 인수에 parseFloat()를 사용하는 것일 수 있습니다. NaN 인 경우, 레이블로 취급합니다. – richardolsson

관련 문제