레쭈고 godot

godot 13차시

정땅미 2024. 11. 26. 03:11

요즘 너무너무 바빴어서 블로그를 작성하는 게 살짝 늦었네요....

너무 늦었나요.. 하하....

복습 겸 들렸기 때문에.. 간략하게 쓰도록 하겠씁니닷.

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