Flash 板


LINE

※ 引述《KawasumiMai (闇に沈んだ刃)》之铭言: : ※ 引述《weirdfoot (怪脚之哈比)》之铭言: : : 各位大大好 : : 小的最近在构思一个小游戏 : : 想先写几个小程式 来试试看顺畅度 : : 今天试的是子弹发射 : : http://www.mediafire.com/download/d4y5gryixgaovpy/ShootTest_2013.fla : : (家里只有CS3 如有不便我可以只贴AS...) : : 左右键可以移动 空白键发射子弹 : : 我的问题是 : : 我按下空白键後会连发 : : 可是我想要发射第一发後 间隔一段时间再发射下一发 : : 可是我没有学过 家里有的书也找不到相关的写法.. : : 想问问有没有办法做到 : : 1.不连发 一下空白键发射一发 or 2.隔一段时间一发 : : 这样不知道会不会太伸手.. : : 麻烦各位大大了(跪 : 游戏中,建议用一个变数去判断影格同步 : 以下描述逻辑,这是我比较常用的作法 : var shoot_delay:Number=new Number(0) : Keydown{ : if(shoot_delay==0){ : 发射 : shoot_delay=30 : } : } : Keyup{ : shoot_delay=0 //可以不要,否则连按就可以拼命射 : } : EnterFrame{ : if(shoot_delay>0){ : shoot_delay-- : } : } : 这样就可以达到控制间隔的目的 不好意思 小的有照着各位大大的建议 研究了很久 还是有一点点问题.. 我目前跑出来的问题是 1.按住空白键不放 第一发会跟後面子弹有明显距离差 2.原地不动按住可以连发 一移动就会停止射击 以下是我的程式码..省略了一些比较不重要的函数 还麻烦各位大大帮我抓个虫 小的写AS资历没有很长 麻烦大家了(跪 var plane=new Plane(); var left:Boolean=false; var right:Boolean=false; var up:Boolean=false; var down:Boolean=false; var fire:Boolean=false; var bullet:Array=new Array(); var i:int; var bulletNumber:int=0; var ControlBulletArray:Array=new Array(); var vx=12.5, vy=12.5; var shootDelay:Number=0;//设定间隔变数 var canShoot:Boolean=true; plane.x=275; plane.y=500; addChild(plane); stage.addEventListener(KeyboardEvent.KEY_DOWN,_onKeyDown); function _onKeyDown(event:KeyboardEvent) { switch (event.keyCode) { case 37 : left=true; break; case 39 : right=true; break; case 38 : up=true; break; case 40 : down=true; break; } } stage.addEventListener(KeyboardEvent.KEY_DOWN,_onKeyDownShoot); function _onKeyDownShoot(event:KeyboardEvent) { trace(shootDelay); switch (event.keyCode) { case 32 : if (canShoot==false) { fire=false; } if (canShoot==true) { fire=true; shootDelay=5; } break; } } stage.addEventListener(KeyboardEvent.KEY_UP,_onKeyUp); function _onKeyUp(event:KeyboardEvent) { switch (event.keyCode) { case 37 : left=false; break; case 39 : right=false; break; case 38 : up=false; break; case 40 : down=false; break; } } stage.addEventListener(KeyboardEvent.KEY_UP,_onKeyUpShoot); function _onKeyUpShoot(event:KeyboardEvent) { switch (event.keyCode) { case 32 : fire=false; canShoot=true; shootDelay=0; break; } } stage.addEventListener(Event.ENTER_FRAME,_planeMode); function _planeMode(event:Event) { if (left) { plane.x-=vx; } if (right) { plane.x+=vx; } if (up) { plane.y-=vy; } if (down) { plane.y+=vy; } if (fire) { bullet[bulletNumber].x=plane.x; bullet[bulletNumber].y=plane.y-50; bullet[bulletNumber].v=-10; ControlBulletArray.push(bullet[bulletNumber]); bulletNumber+=1; if (bulletNumber>98) { bulletNumber=0; } addEventListener(Event.ENTER_FRAME,BulletMove); } inArea(); } stage.addEventListener(Event.ENTER_FRAME,_shootCount); function _shootCount(event:Event) { if (shootDelay==0) { canShoot=true; } if (shootDelay>0) { fire=false; canShoot=false; shootDelay--; } } function BulletMove(event:Event) { for (i=0; i<ControlBulletArray.length; i++) { ControlBulletArray[i].y+=ControlBulletArray[i].v; if (ControlBulletArray[i].y<-5) { ControlBulletArray[i].x=-20; ControlBulletArray[i].y=20; ControlBulletArray.splice(i,1); } } if (ControlBulletArray.length==0) { removeEventListener(Event.ENTER_FRAME,BulletMove); } } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.250.48.110
1F:→ zpl:你写的好复杂... 因为KeyDown事件的特性, 按下按键後的第二次 10/03 11:18
2F:→ zpl:触发时间间隔会较长 ,所以处理逻辑建议都不要放在KeyEvent 10/03 11:20
3F:→ zpl:就像是你方向移动的写法那样就好了 10/03 11:21
4F:→ zpl:至於为何移动就不能连发也是同个问题,连续触发只限於最後按键 10/03 11:27
5F:推 zpl:另外,Array.splice後要注意index的改变 10/03 11:32
6F:→ weirdfoot:嗯…有点不太懂“跟移动一样的写法”什麽意思 我目前子 10/03 14:43
7F:→ weirdfoot:弹的写法跟移动的不一样吗? 10/03 14:43
8F:→ KawasumiMai:KEY_DOWN事件,第一次是DOWN第二次以後是PRESS 10/03 22:09
9F:→ KawasumiMai:所以会有很明显落差,这在AS3是个问题,比AS2麻烦 10/03 22:10
10F:→ KawasumiMai:所以另外先用KEY_DOWN事件去注册布林 10/03 22:11
11F:→ KawasumiMai:在另外写一个仿AS2的isDown函式去判断布林 10/03 22:12
12F:→ KawasumiMai:有点像是你设定left=true up=true的方法 10/03 22:12
13F:→ KawasumiMai:但是你这样太多自订var,每个按键都要一个 10/03 22:13
14F:→ KawasumiMai:所以可以试着利用Array/Object/Dictionary作一串布林 10/03 22:14
15F:→ KawasumiMai:并且直接以keyCode去作索引参照,会比现在好很多 10/03 22:14
16F:→ KawasumiMai:另外移动就会停止射击的问题很简单,Switch造成的 10/03 22:16
17F:→ KawasumiMai:Switch是单选,并不是多选,你必须要一串非else的if 10/03 22:16
18F:→ KawasumiMai:只要符合条件都处理,而不是有高低权限的顺序 10/03 22:17
19F:→ KawasumiMai:可以去google一下 ActionScript3 isDown 会有sample 10/03 22:18
20F:→ KawasumiMai:里面就有很多人写出来些微差异版本的Key Class 10/03 22:19
21F:→ weirdfoot:嗯..K大的意思是 设Array keydown後用for跑过每一个 10/04 00:21
22F:→ weirdfoot:keycode 侦测到按下变成true 然後Enterframe再用一个for 10/04 00:22
23F:→ weirdfoot: *打错没有for 10/04 00:22
24F:→ weirdfoot:再用我原本的方式去跑 这样子逻辑OK吗? 10/04 00:23
25F:推 KawasumiMai:为何要跑过每一个?他有index可用吧? 10/04 01:04
26F:推 KawasumiMai:if(keyArray[38] ==true){ 38是你要的keycode 10/04 01:06
27F:→ KawasumiMai:当然在下建议用Object. 不用开range 10/04 01:07







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

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

TOP