Re: [問題] 關於ENTER_FRAME 物件逐次消失

看板Flash作者 (相沢 祐一)時間13年前 (2012/04/20 19:27), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《terrywang (拼)》之銘言: : var mc:MovieClip; : mc.visible = true; : mc._txt.text.visible = true; 基本上visible跟enabled就算沒有特別宣告 也會預設是true的狀態 因為不可能拉進來預設看不到 : myTime = getTimer(); import flash.utils.getTimer; : for (var i:int=0; i<15; i++) : { : mc = new aa(); : this.addChild(mc); : mc._txt.text = '' +(1+i); : mc.x = 30+(i%5)*mc.width * 2; : mc.y = 50 + int(i / 5) * mc.height * 2; : this.addEventListener(Event.ENTER_FRAME,invisble); : //顯示物件的大小位置,而後再對物件做ENTER_FRAME 這裡提到enterFrame的對象是 物件 但是這裡的this呢?是哪個對象? 不知道的話可以trace(this)看看 : //以求物件可以逐步的一個個隱藏 : } : function invisble(e:Event) invisible? : { : nowTime = getTimer(); : //上面nowTime的設定是參考範例 不知為何會被判定未定義的屬性 : var sec = Math.floor((nowTime-myTime)/1000); : //我設定物件一秒做一次動作 這裡有個問題,你的myTime一開始就抓值了 接著就算成功對物件作enterFrame 短短的for迴圈15趟就已經幾乎同時完成(對人來說) 然後每個物件在一秒之後都判定sec>=1 所以會同時產生,接著在一秒之後同時消失 : mc._txt.text = '' +(1+i); : //因為mc._txt.text是在for迴圈,為了避免找不到,所以在這邊再做一次設定 這一行沒有發生任何錯誤嗎? function invisible裡面 你沒有宣告任何i 而且就算宣告了也不會跟for一樣 直接重複一次也不是正確的做法 : if (sec >= 1) : { : mc.visible = false; : mc._txt.text = false; : } 上面的mc都有一個問題 你的"mc"本身都是在呼叫完aa之後就扔掉了 對於function來說就算你在外面有宣告mc 隨著for迴圈的完成,mc就會是最後一個物件 也就是function invisible幾乎都只有判定最後一個物件 前面的14個是絕對沒有反應的 : } : 因為還在練習,所以有很多概念都寫的不好,希望各位先進可以給予一些提示 : 謝謝你們 M(_ _)M 1. 物件是可以宣告附屬值的 例如你宣告個mc mc.x跟mc.y是因為座標所以被取走了 你可以弄個mc.t=60之類的 2. 另外針對物件作enterFrame 當下應該是mc.addEventListener才對 那裏的this估計應該會是stage本身 你做了15次addEventListener 3. 然後function invisible裡面 可以設定每個frame都讓mc.t-1 if(mc.t<=0)更改visible之類的 而且既然_txt在mc裡面 老實說更改她的visible有點多此一舉 畢竟就算她的visible是true mc的visible是false你也看不到 4. 關於function invisible裡面 那個e:Event不是放假的 如果針對mc.addEventListener之類的 那麼對於"每個"function invisible (對每個物件來說都是獨立的) 只要在裡面寫上e.currentTarget就代表呼叫function的物件本身 舉個例子 var a:MovieClip var b:MovieClip a.addEventListerner(Event.ENTER_FRAME,invisible) b.addEventListerner(Event.ENTER_FRAME,invisible) function invisible(e:Event){ e.currentTarget.x+=1 } 這樣a跟b就會同時每個frame都往右移 5. 如果你不是進行無限期的動作 而是在時間到改變visible之後就沒用了 建議你在if(sec>=1)裡面 加上個removeEventListener的動作 不然算是浪費記憶體 == 以上 加油吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.208.31 ※ 編輯: AizawaYuuiti 來自: 140.121.208.31 (04/20 19:30) ※ 編輯: AizawaYuuiti 來自: 140.121.208.31 (04/20 19:30)

04/21 10:02, , 1F
謝謝先進!!
04/21 10:02, 1F

04/21 10:07, , 2F
謝謝先進解惑與解說 讓我了解錯誤的地方 :D
04/21 10:07, 2F

04/21 10:08, , 3F
謝謝你的解說讓我學到很多東西 m(_ _)m
04/21 10:08, 3F

04/21 23:50, , 4F
天哪!我今天才知道可以直接 obj.value .....orz
04/21 23:50, 4F

04/21 23:54, , 5F
一直以為as3啥都非var不可,白玩這麼久的flash了...(跪)
04/21 23:54, 5F

04/22 02:50, , 6F
AS3並不是所有的東西都可以這樣做的 :)
04/22 02:50, 6F

04/22 10:52, , 7F
是啊,只是我一直以為所有東西都不能這樣作...@@"
04/22 10:52, 7F

04/23 10:11, , 8F
只有 dynamic class 可以這樣
04/23 10:11, 8F
文章代碼(AID): #1FaKWyQ8 (Flash)
文章代碼(AID): #1FaKWyQ8 (Flash)