[轉錄][心得] 關於夏夜攻防戰 - 其二
有了遊戲的基本方向,接下來就是規劃了
我給自己總共一個月的時間, 每天花一至兩個小時在這上面, 其餘時間乖乖寫我的論文
畢竟在現在這個節骨眼還會拿時間來寫這玩意的...應該沒幾個人吧 囧>
我將時間細分為 構思&設計, 實作, 測試 三個主要的部分
構思/設計 & 實作各佔40%的時間, 也就是各約一個半星期
最後的一個星期為實測與後置處理
構思佔掉跟實作一樣的時間,從這不難看出其重要性。
動手之前,完整的把想達成的效果列舉出來。
詳細的列出要做什麼,該做什麼,怎麼做,儘可能的把要做的事全部規劃好
才不會寫到一半發現漏了某些設計而導致程式大修特修。
為了事半功倍,花費多一點時間在前置的設計實在重要。
好,現在我想做一個彈幕遊戲。
於是我需要一個Player,玩家可操作的角色
再來我要一個發射子彈的東西, 在設計上,我希望他不只能夠單純的"生出子彈"
我希望他可以跑,會尋找,會因為生氣或其他因素改變行動模式。
於是Shooter變成一個Seeker。
那,武器怎辦呢? 我希望Seeker可以有不同的武器可供其替換。
讓同時間螢幕上出現的子彈是來自不同的武器所發射出來的。
但是最好每個武器可以共享一定程度的函式,例如這樣
1. Seeker 拿起 武器B 發射B-type子彈 , B-type子彈在空中飛 , 飛出螢幕
2. Seeker 拿起 武器C 發射C-type子彈 , C-type子彈在空中飛 , 打到Player
其中的拿起,在Seeker看來是同樣的動作。
而不同的type子彈則依據各自的行為模式運動、撞擊
所以我要一個weaponMode(武器控管),以及一個武器的Class原形,
其中包含必須的Move(), isHit()函式
每把武器繼承原形Class,然後登記在weaponMode裡。
這樣每次我要用,只要從武器庫裡面撿出來,然後運算它的Move() , isHit等即可
遊戲,總要有些特效啊,譬如Player被打掛了,我希望他能邊墬落邊散出煙花。
或者如果我的遊戲有黑洞砲,那我需要一個黑色粒子沿著黑洞外圍隨機方向被吸入的特效
如果單純依靠Flash的逐格動畫來做,絕對受不了。
於是我決定通通用Particle System(分子系統)來做。
若不計複雜的效果,分子系統可以藉由計算簡單的分子運行方式,
來模擬出大部分的特效。
最好我的程式有這樣的功能 :
"在 T毫秒 的時候, 在(X,Y)地點 叫出 A分子"
A分子可能是一小搓煙霧、可能是中彈後的火花、可能是發射武器時的光波
之後,只要我依著時間的進行,逐次給定參數T, 地點(X,Y), 我就能模擬出許多的效果
於是我的程式又多了一個Effect(特效控管器),負責處理各種特效的需求
最後是介面部分。
螢幕上該有些什麼要傳遞給玩家的訊息? 先考慮最基本的HP,Score,LV好了。
這些訊息無時無刻需要更新。否則玩家只能在被打趴在地上哭的時候,
才發現他的HP早就所剩無幾了
好,最後一個必備物件BackGround(場景控制器)就這樣出現了
主角們都差不多到齊了,接下來討論遊戲的結構部份。
遊戲中會出現的物件 : Seeker(搜尋者), Player(玩家), 各類子彈與武器(Weapon)
Effect(特效物件), Background(分數、介面物件), 還有一些有的沒的全域變數
遊戲,講高級一點就是一種互動式動畫,動畫由一張張的Frame所組成
意味著遊戲程式的基本架構也不脫此限
於是,最外層的遊戲主程式就是這樣
///一堆有的沒的初始化///
Player.init();
Seeker.init();
Weapon.init();
Effect.init();
background.init();
///主程式///////
main {
Seeker.loop(); //負責計算Seeker的行為模式
Player.loop(); //負責接收玩家的操控
Weapon.loop(); //負責所有武器的行為模式與子彈移動
bg.loop(); //介面相關的更新
}
透過一秒執行30次main loop, 宛如賦予這個遊戲重要的脈搏般,程式的運作由此展開.
(續)
文章轉自暨大霞蔚山城 ★ HenryBBS (henry.twbbs.org)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.22.21.89
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章
16
23