前言
最開(kāi)始接觸的是 Unity,
開(kāi)始嘗試 Godot,陸續(xù)跟著水管上的教學(xué),做了幾個(gè)小遊戲。
去年聖誕節(jié)的時(shí)候,看到 GDQuest 的課程在打折。
考慮到想要更系統(tǒng)性的教學(xué),加上拿到 3折的優(yōu)惠,
就直接買了 Ultimate bundle,所有課程包括未來(lái)的課程都包在裡面了。
關(guān)於 GDQuest 的課程筆記
......毫無(wú)反應(yīng)就只是個(gè)筆記
Godot 2D Secrets 中的 Tactical JRPG movement
回合制遊戲的格子移動(dòng)系統(tǒng)
程式架構(gòu)
Grid
負(fù)責(zé)遊戲內(nèi)座標(biāo)和格子座標(biāo)間的計(jì)算
利用 Godot 內(nèi)建的 Resource type 特性共用 Grid
格子座標(biāo) 轉(zhuǎn)成 遊戲內(nèi)實(shí)際位置
遊戲內(nèi)實(shí)際位置 轉(zhuǎn)成 格子座標(biāo)
Vector2 ( x, y ) . floor ( ) 捨去 x, y 後的小數(shù)
EX: Vector2( 5.9, 6.4 ).floor( ) #等於 Vector2( 5, 6 )
判斷有沒(méi)有超出邊界
超出邊界就設(shè)成邊界
clamp ( 要比的值, 最小值, 最大值 )
二維(2D)的格子座標(biāo) 轉(zhuǎn)換成 一維(1D)編號(hào)
轉(zhuǎn)成一維的優(yōu)點(diǎn)
1. 迭代效能較二維優(yōu)秀
2. AStar 尋找路徑時(shí)可以利用
Unit
角色(視覺(jué)表現(xiàn))和 棋盤(pán)上的移動(dòng)
Unit ( Path2D )
|- - -PathFollow2D
| |- - -Shadow ( Sprite )
| |- - -Sprite
|- - -AnimationPlayer
tool mode 在 editor
setget 當(dāng)變數(shù)的值改變的時(shí)候,呼叫後面的 function
set_cell 用 clamp 讓 cell 不超出邊界
yield( self, "ready" ) 等到 func _ready( ) 完成才繼續(xù)
關(guān)掉 _process( ) 直到?jīng)Q定移動(dòng)
設(shè)置 Cell ,然後把角色放在格子中心
Engine.editor_hint 判斷現(xiàn)在是否在 editor
walk_along 增加路徑的點(diǎn)到 Curve 上,Cell 設(shè)在目標(biāo)格子
_is_walking = true 觸發(fā) set_is_walking 讓 _process 開(kāi)始動(dòng)作
_process 開(kāi)始角色移動(dòng)到目標(biāo)格子,到達(dá)後初始化 Curve,發(fā)送結(jié)束訊號(hào)
Cursor
接收的順序 input -> gui_input -> unhandled_input
set_input_as_handled( ) 停止擴(kuò)散這個(gè) input
Rect2( position: Vector2, size: Vector2 )
position 是開(kāi)始的位置,方形的左上角
UnitOverlay
當(dāng)角色被選擇時(shí)呈現(xiàn)可走的格子
UnitPath
呈現(xiàn)角色到目標(biāo)格子的路徑
update_bitmask_region( ) 更新 auto-tiling
PathFinder
利用 AStar 計(jì)算到目標(biāo)格子的最佳路徑,提供給 UnitPath 使用
cell_mappings := { } 是 dictionary
add_point( id: int, position: Vector2 )
所有 cell_mappings 裡的 point 相鄰的格子連起來(lái)
判斷 Cell 的四個(gè)方向上的格子
有沒(méi)有在 cell_mappings 裡,沒(méi)有就略過(guò)此次迴圈
沒(méi)有相連的格子就放進(jìn) out
最後回傳 Cell 四周還能連接的格子
計(jì)算起點(diǎn)到終點(diǎn)的路徑
GameBoard
GameBoard 底下的 Child 裡是 Unit 的都加入 _units
感想
本來(lái)程式理解起來(lái)就不容易了,還要被上一層語(yǔ)言障礙 Debuff。
跟著教學(xué)做完,打開(kāi)測(cè)試結(jié)果還出現(xiàn)問(wèn)題。
只能慢慢找問(wèn)題在哪裡,最後抓到三個(gè)問(wèn)題的位置。
箭頭 TileMap 的 cell 沒(méi)設(shè)定好
程式裡面有個(gè) func 叫錯(cuò)
PathFollow2D 的 Offset 測(cè)試完沒(méi)歸零
這些修完就正常運(yùn)作了。
當(dāng)下真的有種自己克服困難的感動(dòng)。