看板 GameDesign 關於我們 聯絡資訊
總覺得自己標題下的不夠好 但我有點不曉得該怎麼定自己的標題@@ 各位高手們晚安,我們專題的遊戲已經快要告一段落了 這段時間我常上來問一些奇怪的問題,很謝謝各位熱心的幫忙 但最近我在遊戲上遇到了設計關卡的問題,所以又來請求協助了 還希望各位高手能指點一二,謝謝 我想請問類似雷電、雙截龍這類遊戲通常往前移動到某一個程度的時候 都會出現敵人。 雙截龍我有點忘了,但是雷電我確定的是怪物的出現順序都是固定的, 就算重玩,下一次出現的敵人、出現的順序還是那樣 也就是說可能場景到了A地方的時候a群怪要出現,B地方的時候b群怪要出現 其實我們專題遊戲也是打算採用這個方法來出現敵人 不同的是我們是類似雙截龍的橫向卷軸, 當玩家往右走到一定程度的時候,那些設定好的固定怪就會出現, 沒打完就不能繼續前進,但我在設計上一直有個疑問 就是關於敵人的呼叫問題,既然我在A地方那些敵群只會出現一次 那麼我該怎麼設計比較好? 假設我程式是向下面那樣寫 add_enemy(){ //用來判斷是否要呼叫敵人的函式 if( A群敵人還沒出現過==ture && 主角已經移動到了a地方==true ){ 呼叫A群怪物 A群怪物還沒出現過=false; } if( B群敵人還沒出現過==true && 主角已經移動到了b地方==true ){ 呼叫B群怪物 B群怪物還沒出現過=false; } } 其實我一直覺得我這個方法很不好,因為我明知不管是A群或B群敵人 這些敵人就只會出現這麼一次,那為什麼我每次都還要去判斷要不要出現這些怪 而且假設我有十個關卡,那這樣我不就會有add_enemy_1(); add_enemy_2(); 等十個函式來判斷現在是第幾關,第三關的話呼叫第三關的函式來判斷要新增哪群怪 所以我才想來請教一下我這樣的方法真的合適嗎@@? 還是這根本就是錯誤的設計 不曉得我的問題這樣描述會不會太模糊,還請各位多多包涵 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 49.158.0.128
cooper6334:你的出怪模式應該不會讓怪跳著出,所以用一個陣列存 03/30 01:01
cooper6334:每批怪出現的位置,再記已經出到第幾批怪 03/30 01:02
cooper6334:if(現在位置>=出怪位置[第n批]){出第n批怪;n++;} 03/30 01:04
cooper6334:有很多關就 if(現在位置>=出怪位置[第m關][第n批])... 03/30 01:12
LayerZ:如果是雷電的話 與其說位置,不如說是時間? 03/30 01:29
LayerZ:做一個pair<時間, 生怪資訊>的queue,照時間排列 03/30 01:30
LayerZ:關卡開始時取出關卡資料 只比對queue的最前頭 時間到了就 03/30 01:31
LayerZ:生怪並丟掉就好啦 一個時間也只需要判斷一次 03/30 01:32
LayerZ:需要循環生怪的話可能要在生怪資訊做旗標,讀到的話再調整 03/30 01:33
LayerZ:應該是演算法跟資料結構的範圍了@@ 03/30 01:35
LayerZ:如果是雙結龍這種橫向卷軸的話.. 03/30 01:37
LayerZ:關鍵資料是x座標而不是時間 03/30 01:40
LayerZ:因為不是線性的,要掃描玩家經過的x座標,取出掃描過的x座 03/30 01:42
LayerZ:標的生怪資訊.. 03/30 01:42
LayerZ:一樣做個queue 按照x座標排列 03/30 01:44
LayerZ:要用一個韓式寫完所有判斷也太難了... 03/30 01:48
LayerZ:練習自己建立class/struct來整理資料 用point索引資料 03/30 01:49
LayerZ:用stl容器跟演算法來簡化索引 03/30 01:50
LayerZ:最後,如果有時間壓力,效能又不會太差,一個用add()函式完 03/30 01:52
azureblaze:另外每次判斷並沒有你想的那麼昂貴,除非敵人有幾萬個 03/30 01:52
LayerZ:成他也是ok的,重點是完成 03/30 01:52
yoll522:原來如此,我真的是受教了,很感謝各位的幫助 03/30 10:38
ddavid:如果生怪一定有某些順序性,可以嘗試類似Topological Sort 03/30 14:06
ddavid:的方式建圖,然後只把可能的項目推到queue內,被觸發到的 03/30 14:08
ddavid:事件就去查它指向的其它事件是不是已經沒有其它事件指著, 03/30 14:09
ddavid:若無就跟著推進queue裡,這樣這個queue應該是最小的了。 03/30 14:10
ddavid:另外如果有個絕對順序標準(雙截龍)那其實就不用想那麼多 03/30 14:11
ddavid:了,反正是循序的,都只要看Linked List第一項就好,用過丟 03/30 14:12
ddavid:掉自然不會重覆了。 03/30 14:12
ddavid:像洛克人那種退後前進怪會重生的就得全搜了,但是洛克人把 03/30 14:13
ddavid:關卡用樓梯等方式分割成多塊,所以單塊的搜尋量也不多。 03/30 14:14
yoll522:好的,謝謝你的建議 04/01 14:23