요즘 너무너무 바빴어서 블로그를 작성하는 게 살짝 늦었네요....
너무 늦었나요.. 하하....
복습 겸 들렸기 때문에.. 간략하게 쓰도록 하겠씁니닷.
11/19
extends Node2D
class_name Staircase
var staircase_directions
var stair_count
const STAIR_X_GAP = 80 # 계단 간격
const STAIR_Y_GAP = 60 # 계단 간격
static func generate_random_directions(size): # 사이즈 만큼 계단을 만들어줌
var dir_choices = ["left", "right"] # 둘 중에 하나를 랜덤으로 추출
var random_directions = [] # size 만큼 돌면서 left, right 중 하나를 넣음
for n in size:
var dir = dir_choices.pick_random() # 둘 중에서 하나 아무거나 고르기
random_directions.append(dir) # append 해서 배열에 추가하기
return random_directions
func set_staircase_directions(staircase_directions):
self.staircase_directions = staircase_directions # self 는 this
stair_count = staircase_directions.size()
func get_stair_st(idx): # 인덱스 번호 주면
return get_child(idx) # 계단 씬 자체를 가져오는 코드
func get_stair_direction_at(idx): # left, right 둘 중 하나 가져오는 것 계단 방향만 가져옴
return staircase_directions[idx]
func get_stair_count(): # 계단을 계속 가져오는 것
return stair_count
func _ready():
staircase_directions = Staircase.generate_random_directions(100) # 100 개의 계단을 랜덤하게 만든다
var window_size = get_viewport().get_visible_rect().size
var window_width = window_size.x # 가로 사이즈 초기에 설정한 540
var window_height = window_size.y # 세로 사이즈 초기에 설정한 960 들어감
var stair_scene = preload("res://scenes/stair.tscn") # 씬을 가져온다
# preload 와 load 의 다른 점
# preload : 미리 불러오는 거 -> ready 가 실행되기 전에 씀
var idx = 0
var stair_position = Vector2(window_width / 2, window_height) # vector 2 는 값 두 개 들어간다는 말임
# 화면의 중앙 맨 하단이 맨 처음 포지션
for direction in staircase_directions:
var stair_instance = stair_scene.instantiate() # 메모리에 생성됨
stair_instance.name = "Stair" + str(idx + 1)
stair_position = Vector2(
stair_position.x + (-1 * STAIR_X_GAP if direction == "left" else STAIR_X_GAP),
# direction == "left" 만약 이거라면 값이 -1 * STAIR_X_GAP 고, 아니면 STAIR_X_GAP 이다.
# 더해주면 오른쪽으로 가고, 빼주면 왼쪽으로 감
stair_position.y - STAIR_X_GAP # 계단이 올라갈 수록 y 좌표를 빼면 됨
)
stair_instance.position = stair_position # 대입
add_child(stair_instance) # 이걸 해야 화면에 나옴
idx += 1
#func _process(delta):
# 계단이 잘 생성되었는지 확인할 용도로 임시 구현
#if Input.is_action_pressed("ui_left"):
#position.x += 10
#if Input.is_action_pressed("ui_right"):
#position.x -= 10
#if Input.is_action_pressed("ui_up"):
#position.y += 10
#if Input.is_action_pressed("ui_down"):
#position.y -= 10
11월 19일 수업한 건데요..~
이때는 계단을 랜덤으로 배치해주는 것만 했어유
그래서 코드만 쳤는데 코드를 간략하게 설명하자면....
계단의 x, y 간격을 주고, "left", "right" 둘 중 하나를 랜덤으로 나오게 해서 배열에 append 를 해 주었어욧.
계단 씬 자체와 계단 방향을 가져와주고, 계단을 얼마나 가져올 것인도 지정해 줬어요!
그리고 사이즈는 저희 View Port 사이즈에 맞춰서 지정해 줬답니닷.
그리고 저희가 전에 편집했던 계단 씬을 가져왓어여.
이때는 preload 를 사용햇는데 preload 는 ready 가 실행되기 전에 더 먼저 실행한대요!
화면의 중앙 맨 하단에서 계단이 시작해야 해서 메모리를 생성해주고, 로직을 작성해 주었어요.
계단이 오른쪽인지 왼쪽인지를 알아서 어디에 계단을 배치할지를 정해주는 코드였어요!
마지막으로는
흔히들 하는 실수인데 add_child() 를 해주지 않으면 당연히 화면에 원하는 화면이 보이지 않습니다!
'레쭈고 godot' 카테고리의 다른 글
godot 14차시 (0) | 2024.11.26 |
---|---|
godot 12차시 (0) | 2024.11.19 |
godot 11차시 (3) | 2024.11.10 |
godot 10차시 (3) | 2024.10.31 |
godot 9차시 (0) | 2024.10.23 |