2011-08-17 47 views
2

由於我無法控制的原因,目前我正在研究一系列帶有數字框架標籤的Flash文件。這會導致問題,因爲Flash在使用gotoAndPlay/gotoAndStop時似乎將字符串視爲整數。gotoAndPlay/gotoAndStop不能使用數字框架標籤

截圖:

screenshot

例如,gotoAndPlay('96')實際上不會與標籤後藤的幀 「96」,而不是它會的gotoAndPlay幀#96。

現在,它似乎是唯一的解決辦法就是手動找出哪些幀中的每個標籤的休息,所以不是使用gotoAndPlay('96')我會用gotoAndPlay(718)。顯然,這將是乏味的(有很多幀標籤),並且如果有任何編輯需要移動,它還需要更改幀編號。

任何想法?無論如何強迫閃光getAndPlay /停止在一個數字框架標籤,我忽略了?

回答

6

這似乎是一個Flash Player的bug(或至少是一個設計缺陷)給我。但是您應該可以使用MovieClip上的currentLabels屬性,該屬性將爲您提供一組FrameLabel對象。然後使用它在幀標籤數值字符串和實際幀數之間創建您自己的映射。

這裏就是我談論的一些示例代碼:

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在播放頭位置返回了當前幀標籤的數組。原來,該方法實際上返回場景中所有標籤的列表。 – producerism

+0

良好的漁獲生產。更新了我的回覆! @Juan Pablo:這確實是Flash Player API的一個設計缺陷。問題很可能是(古代)gotoAndPlay()方法不強制嚴格鍵入,而是在參數上使用parseFloat()。如果是NaN,它將它視爲標籤。 – richardolsson