精華區beta GameDesign 關於我們 聯絡資訊
基本的程式都有了之後,接下來就是開始寫武器的部分 一開始規劃了15種,加後上來V1.2補上的兩種,共計17種的武器,形成17道關卡。 大抵上武器的製作流程: 繼承一個武器原形 ->改寫Shoot(), Move(), isHit() 等Function ->製作武器的動作、子彈等MovieClip 每一個都這樣。 這邊就不得不重申一開始良好規劃的重要性。 17種寫完,都沒有影響整個程式的大架構。 底下我提幾個比較有趣的武器設計出來講。 導彈: 每一個子彈多了一個life參數, 當life<=0時會從第一移動型態(拋物線) 變成第二移動型態(追跡) 既然追的是玩家,總不能無止盡的追下去。 於是life參數回收再利用,life再次<=0時,停止追蹤改以現有的角度持續前進。 Beam & 放大燈: 兩個例外的碰撞偵測類型。 大抵上這遊戲除了這兩個以外,所有的子彈都是用簡單的bounding box作碰撞偵測 連一些稍微不規則的子彈如火箭、音符也都是有一個隱藏的box用來碰撞。 但這兩個例外,因為他們是直線的。 不是沒有想過作成"移動很快的長條型光束"但受限於Flash本身的效能 FPS上到35大概就極限了,子彈快到某一個程度,可是會"穿越"玩家卻沒有碰撞的 不夠快的光束,跟機關槍又有什麼兩樣呢? 因此最後這兩個武器的碰撞被我獨立出來,改以"範圍"來偵測 像這樣: bool result = HitTest("beam", X, Y); 畫面上的(X,Y)座標點 有沒有在 beam影像物件 的範圍內? 這是相當耗費資源的檢查行為,因此設定上,沒有快速連發的雷射、 也沒有散彈雷射,其原因在此。 子母火箭 & 煙火 這兩個都是標準的子母彈, 但是模式仍有不同。 一個是子彈發射後母彈維持,且是橢圓形;一個子彈發射後母彈消滅。 像這類的子母彈,該武器原形在繼承時必須另外宣告一個彈幕給"子"彈使用。 並且除了原本的Shoot()函式、會再多一個SubShoot(),用來"Create"子彈。 防禦砲台 & 感應砲 這兩個都具有簡單的State機制,用來處理其多變的行為模式 防禦砲台定位在防禦Seeker,阻止Player下降攻擊。 因此,攻擊距離短、高命中率為其特點。 有簡單的State: WANDER: 當Player遠離Seeker許多時。 LOCATE: 當Player離Seeker中等距離時,給定Player"底下"的位置,讓Guarder靠近 MOVE:處理Guarder的移動 FIRE:開砲啦 感應砲,移動模式為,持續的以Player周圍為目的地改變位置,然後給Player 來上背後的一發。 發射時先從地面起飛,持續一定的攻擊以後掉回地面,小跑步退場。 同樣具有稍微複雜的State,模式跟上面的大致相同。 LAND->loop(LOCATE->MOVE->SHOOT)->OUT 在處理這個武器時,原本的設定是當Player移動時,處在"MOVE"狀態的Funnel 也會相對改變其移動目的地,這樣是比較像感應砲真實的模式... 但是後來發現...實在太強了 強到作者根本閃不過 囧> 後來才改成現在只要拼命全螢幕亂逃,就能輕鬆(?)閃避, 但是一停下來就會非常危險的模式。 BlackHole 原本的構想是,即使是複數的黑洞,只要找出離Player最近的一顆,再根據 其距離算出對應的引力強度。但後來覺得這樣過於貧乏(?) 後來改成綜合計算所有釋出的黑洞的方位、距離,來決定最後的引力強度與方向。 後來證實,複數的黑洞影響所生成的力場,果然不錯玩。 為了弄出誇張的效果,背景還多了一層"Black"的Mask,只要場內有黑洞存在 遮罩就會慢慢浮現。 下一篇,來講一下美工、音效、以及其他足以決定遊戲成敗的東西。 (續) 文章轉自暨大霞蔚山城 ★ HenryBBS (henry.twbbs.org) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.22.18.97