作者scars (scars)
看板Flash
标题Re: [问题] 有关同影片片段中 不同影格内的实体
时间Sun Jun 1 09:45:25 2014
※ 引述《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
如上所述, 是事件发生顺序的缘故, 不是因为类型不对
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.243.99.231
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Flash/M.1401587128.A.352.html
※ 编辑: scars (111.243.99.231), 06/01/2014 10:01:16
1F:推 KawasumiMai:恩,当初想反了,原本是认为and必须要满足所有条件 06/01 18:01
2F:→ KawasumiMai:所以会all check,没想过false就跳开的问题 06/01 18:01