2011-11-25 68 views
1

這是一個如果在根上的一個框架上的statern。我想環卡雷拉(一個lenghthy的movieclip)從框架2回框架1(用於測試目的)如果AS3中的語句無法正常工作

這是代碼:

if (MovieClip(root).Carrera.currentFrame==2){ 
    MovieClip(root).Carrera.gotoAndPlay(1); 
} 

的movieclip 不斷去,忽略if語句。 我在做什麼?

回答

2

當你指望它有與if說法沒有錯誤,它只是不被評估是。

當您將代碼放在一個框架,它就會馬上執行,當幀是進入。所以,第一幀開始時,執行if,其條件是當時錯誤的。而它永遠不會被重新執行,因爲你永遠不會告訴它。在AS3中沒有「常規」這樣的東西;-)

取而代之的是,你可以通過添加一個事件監聽器檢查每一個框架:

addEventListener(Event.ENTER_FRAME, function (e) { 
    if (MovieClip(root).Carrera.currentFrame==2){ 
     MovieClip(root).Carrera.gotoAndPlay(1); 
    } 
}); 

或者,您可以只需將gotoAndPlay(1);卡雷拉的第二幀(不是根)上。

+0

很好的解釋,我有一堆影片剪輯打電話給對方,現在我有一個單一的AS3框架呼籲所有的人都用funtions,感謝這個節省時間! –

+0

@加布裏埃爾:很高興能幫到你!您可能需要考慮使用文檔類(外部文件),而不是將所有代碼放在框架上 - 這使得更容易遵循。 – Cameron

0

需要測試的東西...

是否在執行時定義了MoveClip(root)?

是MoveClip(根).Carrera在執行的時候定義?

是影片剪輯(根).Carrera打(或者你就可以叫停,所以它的框架只是呆坐着1?

2

你要明白,你正在運行這個if語句只一次。即使Carrera剪輯在該時刻處於第2幀,該剪輯將跳轉到播放1並繼續播放 - 沒有什麼可以讓它再次跳轉,因此永遠不會有循環。

爲了這個工作,你必須一次又一次地運行相同的語句 - 每個剪輯跳轉到一個新的幀的時間。

例如,可以通過一個爲此)附加此腳本到幀卡雷拉剪輯(不是根的2 ):

gotoAndPlay(1); 

或b)將一個事件監聽到它:

MovieClip(root).Carrera.addEventListener (Event.ENTER_FRAME, 
    function (ev:Event) : void { 
     var cl:MovieClip = ev.target as MovieClip; 
     if (cl.currentFrame == 2) cl.gotoAndPlay(1); 
    } 

還有更多的方法可以做到這一點,但除非你打算做更復雜的東西不是每一個現在,然後跳轉到幀,我勸你去的第一個選項 - 看來你應該以前學習更多關於ActionScript的知識嘗試事件監聽器。

+0

謝謝,我現在明白了,我一直在玩功能,我完全忘記了ENTER_FRAME,我能夠解決它。 –