Flash 板


LINE

※ 引述《mucoci (奇寶~)》之銘言: : 小弟要作出 機體在射出子彈後,隔三秒才能再發射 : 由監聽滑鼠click 開始 : 完成後 : 一開始的確正常 : 但過一會兒如果連點滑鼠後,就失常了 : 變成可以連發@@" : 隔三秒的限制不見了~~ : 請各位高手協助看一下是哪的問題~ : 程式碼如下 : //監聽滑鼠點擊來發射子彈 : nowthis.stage.addEventListener(MouseEvent.MOUSE_DOWN,BulletEvent); : function BulletEvent(me:MouseEvent):void : { : if (MouseEvent.CLICK && canfire == 1) //變數canfire用來控制是否可發射 這裡很怪,if(MouseEvent.CLICK) 作用是? me就是MouseEvent了,這樣寫未必能求得確切的反應 另外,在Mouse_Down function裡面偵測Click 你需要先搞懂這兩者的差異 : { 1可發射,2不可發射 恩...沒啥問題 不過建議1可發射,0不可發射,或者乾脆用boolean而不是Number 這算是sense : canfire =2; //可發射後,立刻讓接下來變不可發射 : 並移除滑鼠點擊的監聽 : stage.removeEventListener(MouseEvent.MOUSE_DOWN,BulletEvent); 這一行不需要,當你已經使用canfire來判定是否可以發射的時候 沒必要時常對MouseDown動作進行監聽的開關 反正按下去當canfire不對的時候也不會有動作不是? : //當滑鼠按下時,在場景上創造一個子彈 : var ball_mc =new ball(); :   //設定子彈出現時的起始座標,正常來說應該是要設定在子彈的砲口處 : ball_mc.x=nowthis['warcarshooter_mc'].x; : ball_mc.y=nowthis['warcarshooter_mc'].y; : //這裡是設定子彈行進的位移速度,分別計算出來並且寫入子彈的屬性內 :   //屬性名稱可以自己定 : ball_mc.MoveX=carbulletspeed/30*Math.cos((nowthis['warcarshooter_mc'].rotation-90)*Math.PI/180); : ball_mc.MoveY=carbulletspeed/30*Math.sin((nowthis['warcarshooter_mc'].rotation-90)*Math.PI/180); : ball_mc.rotation=nowthis['warcarshooter_mc'].rotation-90; : nowthis.addChild(ball_mc); : //賦予子彈一個ENTER_FRAME的事件 : ball_mc.addEventListener(Event.ENTER_FRAME,BulletMoveEvent); : //下面是在3秒後,變可射擊狀態,同時加回滑鼠監聽 : setInterval(function () : { : canfire = 1; : stage.addEventListener(MouseEvent.MOUSE_DOWN,BulletEvent); 理由同上,沒有移除就不用有加回來的動作 : }, 3000); : } : } : 感謝~~ 最大的問題點在於 setInterval跟Timer一樣,都是一定時間就會"重複"的東西 而Timer可以設定次數,但setInterval好像不行 而你設定在BulletEvent裡面進行setInterval的動作 每一個setInterval就會有一個"匿名"計數器 換句話說,每當你按一下就有一個無限的時間倒數在運轉 所以當第二次以後,你按下去並且讓canfire變成2之後 可能沒半秒剛好第一個setInterval倒數完畢就把它變1了 這表示當幾十次之後就有幾十個setInterval在倒數 而AS3請用Timer,setInterval是AS2的東西 ============================================================================ import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; var canfire = 1; //按下滑鼠事件 stage.addEventListener(MouseEvent.MOUSE_DOWN,BulletEvent); //設定三秒的Timer,後面的1是次數 var reset:Timer=new Timer(3000,1) //Timer事件,三秒到就跑一次 reset.addEventListener(TimerEvent.TIMER,resetBullet) function BulletEvent(me:MouseEvent):void { //可以發射的話 if (canfire) { //變成不能發射 canfire = 0; //執行你要的動作 ................... //讓倒數開始,因為有設定次數所以每次只會跑一次 reset.start() } } function resetBullet(e:TimerEvent){ //讓他變成可以發射 canfire=1 } -- 昔、とあるドSなひとは、ドMな人と出会った。   いつかふたりは恋して、Hなことをした。     それは──              S.H.M         シンプル.ハーモニック.モーション                      ──世界の一番美しいものであります。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.84.58.228
1F:推 mucoci:看懂了~~小弟先來試試,大大感恩~~ 12/02 21:47
2F:推 mucoci:實測後非常成功~~~謝謝大大,果然是像大大說的 12/02 21:58
3F:→ mucoci:有無數個timer在倒數,所以會變連發 12/02 21:58







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP