Godots ์์ค ์ฝ๋( core/list.h )์๋ ์ด์ค ์ฐ๊ฒฐ ๋ชฉ๋ก์ด ์์ต๋๋ค.
์ด์ค ์ฐ๊ฒฐ ๋ชฉ๋ก์ด ๋ฒกํฐ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก ๋
ธ์ถ๋๋ฉด ์ข์ ๊ฒ์
๋๋ค.
ํนํ ๋์ ์ ์ธํ ๋ชจ๋ ์์น์ ์์๋ฅผ ์ฝ์
/์ ๊ฑฐํ ๋.
์ด ์์
์ ์ํํ ์ ์์ง๋ง ์ ๊ธ ๋ฐ ๋ฑ๋ก์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค(Array ํด๋์ค์ ๋์์ ๋ฏธ๋ฌ๋งํ ์๋ ์์ง๋ง).
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชฉ๋ก ๋
ธ์ถ
iterable๋ก ๊ตฌํํ๋ ๊ฒ๋ Array๊ฐ ์ํํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค.
๋ํ (์์ฒญํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ด โโ์ ์์) core/ring_buffer.h๋ฅผ ๋๊ธฐ์ด๋ก ๋
ธ์ถํ๋ ๊ฒ๋ ๋๊ธฐ์ด ์๊ตฌ ์ฌํญ์ ์ ํฉํฉ๋๋ค.
๊ทธ๊ฒ์ "๊ณ ์ " ํฌ๊ธฐ๋ฅผ ๊ฐ๊ณ ์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค๋ ์ ํ์ด ์๋ ์ด์ค ์ฐ๊ฒฐ ๋ชฉ๋ก(๊ทธ๋ฆฌ๊ณ ๋ฒกํฐ ๊ธฐ๋ฐ ๋ชฉ๋ก์ผ๋ก ๋ ๋์ ์ ์)์ ์ฌ์ฉํ๋ ๋๊ธฐ์ด๋ก ๋ ์ ์ํ๋์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ ํํ ์ด ๋์์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
3.1 ๋ง์คํฐ 9e7cee2์์ ์ฌ์ ํ ์ฌํ ๊ฐ๋ฅ/๊ด๋ จ: ์ด๋ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์์ง ๋ ธ์ถ๋์ง ์์ต๋๋ค.
๋ด๊ฐ ์ฌ์ฉํ ์์๋ ์ ์ ํ ์ฐ๊ฒฐ ๋ชฉ๋ก ๊ตฌํ์ด ์๋์ง ๋ฌป๋ reddit์ ๊ฒ์ํ๋ ค๊ณ ํ์ต๋๋ค.
๋น ๋ฅธ FIFO ๋ชฉ๋ก์ด ํ์ํ๊ณ ์ด๋ ์ด๊ฐ ์์ ์ ์ํํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ์ด๋ ์ด ๊ต์ฒด๋ก ์์ฑํ๊ณ ์๋นํ ์๋ ํฅ์์ ์ป์์ต๋๋ค.
extends Node
var front_space = 0
var array_len = 0
var array_data = []
func push_back(val):
if array_data.size() < front_space+array_len+1:
enlarge()
array_len += 1
array_data[front_space+array_len-1] = val
func pop_back():
if array_data.size() > array_len*8:
reseat()
array_len -= 1
return array_data[front_space+array_len]
func back():
return array_data[front_space+array_len-1]
func pop_front():
if front_space > array_len:
reseat()
if array_data.size() > array_len*8:
reseat()
front_space += 1
array_len -= 1
return array_data[front_space-1]
func front():
return array_data[front_space]
func size():
return array_len
func enlarge():
array_data.resize(front_space+array_len*2+1)
func reseat():
var new_array = []
new_array.resize(array_len*2)
for i in range(array_len):
new_array[i] = array_data[i+front_space]
front_space = 0
array_data = new_array
func print_debug():
print("front: ", front_space,", len: ",arr
Godot ์์ง์ ๋ํ ๊ธฐ๋ฅ ๋ฐ ๊ฐ์ ์ ์์ ํ์ฌ ์ ์ฉ Godot ๊ฐ์ ์ ์(GIP) ( godotengine/godot-proposals ) ์ด์ ํธ๋์ปค์์ ๋ ผ์๋๊ณ ๊ฒํ ๋๊ณ ์์ต๋๋ค. GIP ์ถ์ ๊ธฐ์๋ ์ ์์์ ์์ฐ์ ์ธ ํ ๋ก ์ ์์ํ๊ณ ์ปค๋ฎค๋ํฐ๊ฐ ์์ง ์ ์์์ ์ ํจ์ฑ์ ํ๊ฐํ๋ ๋ฐ ๋์์ด ๋๋ ๋ชจ๋ ๊ด๋ จ ์ ๋ณด๊ฐ ํฌํจ๋๋๋ก ์ค๊ณ๋ ์์ธํ ๋ฌธ์ ํ ํ๋ฆฟ์ด ์์ต๋๋ค.
๊ธฐ๋ณธ( godotengine/godot ) ์ถ์ ๊ธฐ๋ ์ด์ ์ ์ ์ผ๋ก ๋ฒ๊ทธ ๋ณด๊ณ ์ ๋ฐ ๋์ด์ค๊ธฐ ์์ฒญ ์ ์ฉ์ด๋ฏ๋ก ๊ธฐ์ฌ์๊ฐ ๋ฒ๊ทธ ์์ ์์ ์ ๋ ์ง์คํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ฃผ์ ์ด์ ํธ๋์ปค์์ ์ด์ ๊ธฐ๋ฅ ์ ์์ ๋ชจ๋ ์ข ๋ฃํฉ๋๋ค.
์ด ๊ธฐ๋ฅ ์ ์์ ๊ด์ฌ์ด ์์ผ์๋ฉด ์ฃผ์ด์ง ๋ฌธ์ ํ ํ๋ฆฟ ์ ๋ฐ๋ผ GIP ํธ๋์ปค์์ ์ ์ ์์ ์ฌ์ญ์์ค (์ด๋ฏธ ์กด์ฌํ์ง ์๋์ง ํ์ธํ ํ). ๊ด๋ จ ํ ๋ก ์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ด ๋ซํ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํด์ผ ํฉ๋๋ค(์ ์ ์์์๋ ์์ฝํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค). ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
3.1 ๋ง์คํฐ 9e7cee2์์ ์ฌ์ ํ ์ฌํ ๊ฐ๋ฅ/๊ด๋ จ: ์ด๋ฌํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์์ง ๋ ธ์ถ๋์ง ์์ต๋๋ค.