Re: [問題] 有關同影片片段中 不同影格內的實體

作者: scars (scars)   2014-06-01 09:45:25
※ 引述《weirdfoot (ユニライト)》之銘言:
: 假設舞台上有一個由影片片段A建立出的實體a
: A內有4個影格 第4格上有一個影片片段 實體名稱命為mc_A4
: mc_A4也有4個影格
: 我希望mc_A4播到第4格時 實體a可以回到第一格
: 我目前的做法是
: 在現存寫在實體a上的ENTER_FRAME事件上寫
: //前面有寫讓a跳到第4格的方法(按空白鍵)
: if(a.currentFrame==4 && a.mc_A4.currentFrame==4)
: a.gotoAndStop(1)
: 可是按下空白鍵時會輸出
: Error #1009: 無法存取 Null 物件參考的屬性或方法。
ref. http://goo.gl/G1C91Q
MovieClip 從進入到離開一個 frame, 依序會發生以下事情
1.發出事件: Event.ENTER_FRAME
2.執行子物件的建構函式
3.子物件發出事件: Event.ADDED
4.子物件發出事件: Event.ADDED_TO_STAGE
5.發出事件: Event.FRAME_CONSTRUCTED
6.執行該 frame 中的影格動作指令
7.執行子物件的影格動作指令
8.發出事件: Event.EXIT_FRAME
9.發出事件: Event.RENDER
10.子物件發出事件: Event.REMOVED
11.子物件發出事件: Event.REMOVED_FROM_STAGE
在你偵聽到 a 發出 ENTER_FRAME 的時候, a 的子物件 mc_A4 還沒建構出來
因此 a.mc_A4 還是空值, 自然也找不到 a.mc_A4 的 currentFrame 屬性
所以你可以改為偵聽 FRAME_CONSTRUCTED
或是如 cleanwind 所回覆的, 在 mc_A4 的第四個影格加入指令
MovieClip(parent).gotoAndStop(1)
應該都能解決你的問題
: 推 KawasumiMai:你提到ENTER_FRAME,應該就是AS3了 05/31 13:15
: → KawasumiMai:猜測應該是你的mc_A4只出現在第四格 05/31 13:15
: → KawasumiMai:所以在a的第一格時無法抓到mc_A4的currentFrame 05/31 13:16
: → KawasumiMai:不要用&&,把它拆成兩行試試看 05/31 13:16
: → KawasumiMai:if(a.currentFrame == 4){ 05/31 13:16
: → KawasumiMai: if(a.mc_A4.currentFrame == 4){ 05/31 13:17
: → KawasumiMai:這樣一來只要a不是4在第一層就會跳過了 05/31 13:17
判斷式如果是用 && 連接
當前面的陳述為false時, 就會直接跳過後面的陳述
因此
if(p && q){ r(); }

if(p){ if(q){ r(); } }
是一模一樣的
相對的如果是以 || 連接
當前面的陳述為true時, 一樣會直接跳過後面的陳述
: → weirdfoot:喔喔 這樣可以抓到了 不過現在問題變成我要是寫a.mc_A4. 05/31 19:40
: → weirdfoot:play()還是會出現錯誤...是類型不對的問題嗎? 05/31 19:40
如上所述, 是事件發生順序的緣故, 不是因為類型不對
作者: KawasumiMai (さあ、死ぬがいい)   2014-06-01 18:01:00
恩,當初想反了,原本是認為and必須要滿足所有條件所以會all check,沒想過false就跳開的問題

Links booklink

Contact Us: admin [ a t ] ucptt.com