在我製作AirScape遊戲中重力機制過程中,有很多有意思的東西和大家分享。所以我決定寫一個關於如何實現的教程,同時也說明這個是很容易的。
首先,我必須是這是Yann Granjon想出來的方法,不是我的想法,我只是將其實現了。他在這個遊戲過程中幫助了我很多,如果沒有他的話,這個是無法完成的。
基礎知識
實現這個最重要的是能夠改變"Platform"行為的重力角度,然後我們就可以集中精力去考慮如何確定在任意一點這個角度是多少?
因此Yann建議,我實現了重力區域。
(圖片有些模糊,可能是因為上傳過程中被壓縮)
【Level 1 兩種類型的重力區域】[1]
在此,你可以看到 level 1-1 大致樣子,我們主要關心陸地周圍的彩色區域。
這些形狀都是同一個物件類型「gravzone」大約有5種形狀,都是為了不同的目的的。
這些形狀可以分為兩種,"Relative", and "Non-Relative." 可以用一個布林值來表示。
The code
代碼非常簡單,以下是一些基本的代碼:
基本上,對於任何重力區域都是有一個角度,這個角度是由該區域的relative屬性來決定的。
一般來說,環形的重力區域是relative,而線性的是non-relative的。區別在於簽字總是指向一個特定的點,這樣可以支持環形的表面,後者只是一個固定的角度(這個角度一般是由重力區域自身決定的)。
因此,重新回到代碼。對於玩家進入的每個重力區域,計算一個正確的角度(對於non-relative就是 gravzone.a,對於relative的區域,則是angle(player.x,player.y,gravzone.x,gravzone.y)),我們可用兩個向量來表示這個角度。這樣做的目的是因為後一個向量可以ADDED到上次的計算結果,也就是說可以計算出玩家所相關重力區域的平均角度。
也就是,我可以重疊兩個或多個重力區域,最終的結果就是指向一個這些角度的平均數值。
180翻轉
[譯者注:這一段不太明白,只是大致意思]
當翻轉180度的時候,會有一個問題。基本上,平均角度計算會有問題,導致失去控制玩家的方向。因此,我引入一個不可見的物件,flip_assist。
這個也包含了一些傳統的重力程式設計,當玩家被flip_assist包含的時候。
這個代碼基本上是對於被 flip-assist手動設置重力角度切換到標準的重力角度,然後當玩家不再重疊的時候切換回正常。
其實對於每個黃色條狀區域有2個flip_assists ,因此玩家可以來回翻轉。布林值'cannot_reset_flip' 這個是必要的,這樣遊戲就不會混亂了。
我們有一些這個遊戲最基礎的機制。
這有一些關卡,以獲取一些更好的想法:
希望你能喜歡這個教程,如果我忘記寫什麼也請務必告訴我。