[問題] 沒有監聽可取消??

作者: mucoci (奇寶~)   2015-09-19 19:15:31
小弟之前有作一個點擊畫面,便可移動背景的程式
(就是人物行走時的概念)
以前在用的時候,沒發現問題(漏掉了)
現在在用的時候,發現問題很大
就是當我點擊一次時,進行移動。移動到目的地時,停止移動
但在移動未停止前,再點擊一次時,速度會增加
再點擊,速度再增加
初步判定是ENTER_FRAME監聽事件未移除
但其實我是有加上移除的,只是不知道為啥失敗
請教高手提點
程式碼如下 (只寫重點)
import flash.display.MovieClip;
import flash.events.Event;
stop();
stage.addEventListener(MouseEvent.CLICK,move_map);//對畫面作監听
var now_move_yn:Boolean=false;//判定是否移動中
var time:Number=0;//計數器
function move_map(me:MouseEvent):void
{
time=time+1;
//第二次點擊才有反應,如果在移動中,就取消移動監听
if (now_move_yn==true)
{
stage.removeEventListener(Event.ENTER_FRAME,start_move);
//就是這個無法移除,因為是空的,但f_i+1卻仍在跑
}
now_move_yn=true;//點擊後,便成了移動狀態
if (time==1)//先以移動一次來作測試
{
//開始移動
stage.addEventListener(Event.ENTER_FRAME,start_move);
var f_i:Number=0;//測試可移動用的計數器
function start_move(e:Event):void
{
f_i=f_i+1;//有+1就表示在移動
trace ("f_i="+f_i);
}
}
}
小弟弄了快一下午,請教高手指點
到底我哪沒看到呢??
程式碼可直接複製測試~~~點兩下畫面就知道bug在哪了
作者: lianglech (Lech Liang)   2015-09-19 20:11:00
hasevent
作者: mucoci (奇寶~)   2015-09-19 20:15:00
樓上??
作者: KawasumiMai (さあ、死ぬがいい)   2015-09-22 21:42:00
一樓說的是 if(stage.hasEventListener(Event.ENT...不過基本上,你會出現這種問題表示你的寫法不夠簡潔才會有你覺得應該要有卻沒有的情況。雖然檢查是必要痾,你說程式碼可直接複製測試,但你的MouseEvent的結尾中括胡沒看到,範圍包了下面一堆function跟另一個事件,這樣無法確認你原code是不是真的正確。看起來就是有節錄跟篩選過
作者: mucoci (奇寶~)   2015-09-23 10:34:00
K大,我程式碼剛改成只想測的重點了,可直接測試另外,我用haseventListener測過了,stage的監听是任何時候都在的,我也問過其他寫程式的朋友,也沒有看出問題但移除時enter_frame時,就是說沒有這東西....
作者: viceversa56 (姊超猛)   2015-09-23 20:11:00
var f_i:Number=0;//測試可移動用的計數器function start_move(e:Event):void{...}移到最外層,不要function 裡面又包一個function

Links booklink

Contact Us: admin [ a t ] ucptt.com