遊戲啓示錄 關於Update的相關問題

遊戲啓示錄 關於Update的相關問題

這裏說的Update是指的遊戲的主循環。一般情況下。爲了程序的方便控制我們一般只會有一個主循環。所有的遊戲邏輯都會在這一個循環中完成。(額,其實這麼做有點浪費。因爲畢竟現在的電腦都是多核的。這麼做了之後。其實只是利用了其中一個核心而已。不過這個並不是我們討論的重點。)

起因

我非常喜歡火影。裏邊的打鬥場景做的非常不錯。特別是佩恩VS九尾那段。名人九尾化之後,放出了能量彈幕而佩恩釋放出了小規模的神羅天徵。形成了能量屏障,將九尾的彈幕屏蔽在外。我想在我們的遊戲裏邊加一個能量護盾。可以讓射過來的彈幕彈開。不過我發現基於我們的普通更新的更新架構,沒有辦法完成這件事情。

原本的架構


我想說的是我們的原本的架構可能就是現在使用最廣泛的架構。我們是按照個體來更新的。就是認爲場中的所有的東西都是單獨的個體。某一個怪物、子彈、玩家、障礙物都認爲是一個個體。讓他們挨個進行更新。一個更新完了下一個更新。比如說,先讓怪物更新,AI或者傷害;子彈位置更新、傷害;玩家的動作等等等。雖然這是常見的更新方式。不過這樣的更新方式卻沒有辦法完成神羅天徵這個技能。因爲超高速的彈幕是可以直接越過護盾直接打到玩家。

按照同一個Object一塊更新的模式

缺陷的分析

其實也就是在某一幀裏邊的更新順序分析。可能會產生以下結果:

模式1

1. 技能先更新,查找到範圍內的彈幕,然後將他們彈開。
2. 彈幕更新,因爲技能已經更新,所以這一幀中後來能夠進來的彈幕,會在這一幀進入技能範圍。甚至擊中玩家

模式2

1. 彈幕更新,彈幕進入技能範圍。打出傷害
2. 技能更新,發現界面內部的範圍的彈幕,將彈幕彈開。不過那些已經擊中玩家的彈幕就沒有辦法。他們的任務已經完成了。

設想

其實這個事情也挺簡單的。就是邏輯更新順序的問題。其實應該,就是彈幕更新位置之後,技能更新將彈幕推出去,彈幕計算傷害。這樣彈幕就能夠被能量護盾推出去了。簡直完美。

1. 彈幕位置更新 可能進入範圍
2. 技能邏輯更新 將進入範圍的彈幕放到合適的位置
3. 彈幕傷害計算 看有沒有能夠擊中的目標釋放傷害

擴展

其實。當這個遊戲的對象的移動都比較緩慢的情況下。所有的這些細節都不是很重要了。畢竟這種更新是比較高速的情況纔會出現問題的。比如說某一個彈幕的射速非常快,每秒鐘的射速爲1800。按照滿幀60爲來計算,那麼每一幀的更新爲30像素,因爲某些順序更新的問題可能會造成最大2幀的的差異也就是可能出現60像素的差異。其實這個已經非常誇張了吧。非常明顯。如果你的護盾不夠60像素,那是極有可能直接呼一臉的。

新的更新模式

如果說原來的更新模式爲縱向,那麼現在的更新順序應該修改爲橫向。按照相同的邏輯一塊更新的模式。

如果是這種更新模式的話。就可以在某一個對象更新中插入其他的更新邏輯。簡直棒棒噠的。

算了其實這種總結的內容說起來比較困難。只有體會過纔會明白。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章