推 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