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