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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP