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