Re: [問題] 想做類似打地鼠 卻沒有辦法@@"

作者: scars (scars)   2014-04-23 11:14:35
※ 引述《starboarder (星巴克on月球)》之銘言:
: function hit(event:MouseEvent){
: score = score + 1
: removeChild(mouse)
: }
: function mouseend(event:TimerEvent){
: removeChild(mouse)
: }
就我拿你的檔案來測試
是可以動的,但會有 runtime error
原因在於你兩個函數裡面都用了 removeChild(mouse)
但可能 hit 已經先執行了,那麼到 mouseend 就會出現
"Error #2025: 提供的 DisplayObject 必須是呼叫者的子系" 這個錯誤
因為這時 mouse 已經被 remove 掉了
解決方式,你可以在 hit 裡面停止 looktime
或者在 mouseend 裡面判斷 if(contains(mouse))removeChild(mouse);
或其他你認為可避免重複 removeChild 的方法
另外就一個程式設計師的角度,建議你描述問題的時候給予正確資訊
只用一個"不行了",你沒辦法讓別人知道是怎樣不行了
在我們找出答案之前,我們還得先找出問題本身是什麼
錯誤資訊其實 output 視窗都有,建議你下次程式"不行了"的時候
仔細檢視 output 視窗給你的資訊,在討論時也提供大家這些資訊
: 推 SheLoBDenI:function 裡面沒有宣告mouse,他只能抓到最後一個。 04/21 11:32
: → SheLoBDenI:你應該是要用event.target才是移除每次click的目標 04/21 11:33
就 variable scope 來說他原本的做法是沒有問題的
: 推 KawasumiMai:痾...你Function裡面包function? 04/22 23:24
: 推 KawasumiMai:試著把function抓出來獨立然後確定好變數的區域 04/22 23:28
: → KawasumiMai:然後使用上面說的event.target吧 04/22 23:28
: → KawasumiMai:猜測你應該是一開始放外面的時候抓不到mouse所以才 04/22 23:28
: → KawasumiMai:扔進去裡面? 04/22 23:28
function 裡面包 function 雖然習慣上不是很正確
但視情況也不見得是一定是錯誤的做法
就原PO來說,問題也不是出在巢狀 function 上面
作者: KawasumiMai (さあ、死ぬがいい)   2014-04-24 10:33:00
問題雖然不出在巢狀,但就原原PO的情況來說,下次TimeEvent的物件整個匿名化了,很容易抓不到目標吧?
作者: scars (scars)   2014-04-24 16:02:00
就他變數scope的設計來說我想是不會的
作者: starboarder (星巴克on月球)   2014-05-05 19:14:00
阿....最近比較忙所以沒有上來看 想不到這麼多人回文 謝謝大家的幫助 等一下來試試看 有幫忙的一人200P幣 聊表心意 謝謝幫忙 (希望不用再麻煩大家)也謝謝scars的提醒 下次會把output的資訊放上來的

Links booklink

Contact Us: admin [ a t ] ucptt.com