Godot: ์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก์„ ์Šคํฌ๋ฆฝํŠธ์— ๋…ธ์ถœ

์— ๋งŒ๋“  2016๋…„ 11์›” 26์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: godotengine/godot

Godots ์†Œ์Šค ์ฝ”๋“œ( core/list.h )์—๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก์ด ๋ฒกํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋…ธ์ถœ๋˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํŠนํžˆ ๋์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์œ„์น˜์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…/์ œ๊ฑฐํ•  ๋•Œ.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž ๊ธˆ ๋ฐ ๋“ฑ๋ก์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค(Array ํด๋ž˜์Šค์˜ ๋™์ž‘์„ ๋ฏธ๋Ÿฌ๋งํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ).
๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชฉ๋ก ๋…ธ์ถœ๊ทธ๋ฆฌ๊ณ  ๋ชฉ๋ก::์š”์†Œ๋Š” ๋‚ด๊ฐ€ ์ถ”์ธกํ•˜๋Š” ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.?
iterable๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ Array๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ (์š”์ฒญํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Œ) core/ring_buffer.h๋ฅผ ๋Œ€๊ธฐ์—ด๋กœ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ๋„ ๋Œ€๊ธฐ์—ด ์š”๊ตฌ ์‚ฌํ•ญ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ "๊ณ ์ •" ํฌ๊ธฐ๋ฅผ ๊ฐ–๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค๋Š” ์ œํ•œ์ด ์žˆ๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ ๋ชฉ๋ก(๊ทธ๋ฆฌ๊ณ  ๋ฒกํ„ฐ ๊ธฐ๋ฐ˜ ๋ชฉ๋ก์œผ๋กœ ๋” ๋‚˜์€ ์ •์˜)์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๊ธฐ์—ด๋กœ ๋” ์ž˜ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ •ํ™•ํžˆ ์ด ๋™์ž‘์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

archived feature proposal core gdscript

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

3.1 ๋งˆ์Šคํ„ฐ 9e7cee2์—์„œ ์—ฌ์ „ํžˆ ์žฌํ˜„ ๊ฐ€๋Šฅ/๊ด€๋ จ: ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์•„์ง ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

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 ํŠธ๋ž˜์ปค์—์„œ ์ƒˆ ์ œ์•ˆ์„ ์—ฌ์‹ญ์‹œ์˜ค (์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•œ ํ›„). ๊ด€๋ จ ํ† ๋ก ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ์ด ๋‹ซํžŒ ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ƒˆ ์ œ์•ˆ์—์„œ๋„ ์š”์•ฝํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค). ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰