Re: [問題] 遊戲中 子彈發射的間隔

作者: weirdfoot (ユニライト)   2013-10-02 22:56:12
※ 引述《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
作者: zpl   0000-00-00 00:00:00
你寫的好複雜... 因為KeyDown事件的特性, 按下按鍵後的第二次觸發時間間隔會較長 ,所以處理邏輯建議都不要放在KeyEvent就像是你方向移動的寫法那樣就好了至於為何移動就不能連發也是同個問題,連續觸發只限於最後按鍵另外,Array.splice後要注意index的改變
作者: weirdfoot (ユニライト)   0000-00-00 00:00:00
嗯…有點不太懂“跟移動一樣的寫法”什麼意思 我目前子彈的寫法跟移動的不一樣嗎?
作者: KawasumiMai (さあ、死ぬがいい)   0000-00-00 00:00:00
KEY_DOWN事件,第一次是DOWN第二次以後是PRESS所以會有很明顯落差,這在AS3是個問題,比AS2麻煩所以另外先用KEY_DOWN事件去註冊布林在另外寫一個仿AS2的isDown函式去判斷布林有點像是你設定left=true up=true的方法但是你這樣太多自訂var,每個按鍵都要一個所以可以試著利用Array/Object/Dictionary作一串布林並且直接以keyCode去作索引參照,會比現在好很多另外移動就會停止射擊的問題很簡單,Switch造成的Switch是單選,並不是多選,你必須要一串非else的if只要符合條件都處理,而不是有高低權限的順序可以去google一下 ActionScript3 isDown 會有sample裡面就有很多人寫出來些微差異版本的Key Class
作者: weirdfoot (ユニライト)   0000-00-00 00:00:00
嗯..K大的意思是 設Array keydown後用for跑過每一個keycode 偵測到按下變成true 然後Enterframe再用一個for*打錯沒有for再用我原本的方式去跑 這樣子邏輯OK嗎?
作者: KawasumiMai (さあ、死ぬがいい)   0000-00-00 00:00:00
為何要跑過每一個?他有index可用吧?if(keyArray[38] ==true){ 38是你要的keycode當然在下建議用Object. 不用開range

Links booklink

Contact Us: admin [ a t ] ucptt.com