레쭈고 godot

godot 11차시

정땅미 2024. 11. 10. 20:03

처음 만드는 게임을 다 만들었습니닷!

일주일 전에 배웠던 내용을 지금 쓰고 있어서 굉장히 기억을 더듬어야 하지만.. 이 또한 제 업보 아니겠나요...

그리고 이러면서 복습이 된다고 생각합니다.

 

지금은 돌이 떨어졌을 때 연기가 나는 모션을 넣는 과정입니다.

우선 rock.gd 에

if position.y >= (960 + MARGIN):
		var smoke_scene = preload("res://scenes/smoke.tscn")
		var smoke_instance = smoke_scene.instantiate()
		smoke_instance.position.x = position.x
		smoke_instance.position.y = 960
		add_child(smoke_instance)
		queue_free()

 

이 코드를 넣어 씬을 가져옵니다. 그리고 이를 인스턴스로 생성해 줘요!

자신의 x 를 self.position.x 에 맞춰줍니닷. 이것이 바로 돌이구요 self 는 생략이 가능해요!

y 는 960 으로 가장 바닥으로 맞춰주시구요.

add_child() 를 해서 이제 실행이 가능합니다.

근데 이런 식으로 작성을 해주게 되면 queue_free() 를 하였을 때 rock 이 사라지게 돼요..

근데 그러면 그 rock 의 자식으로 만들어준 smoke_instance 로 당연히~! 사라지겠죠?

그렇기 때문에, 

var smoke_scene = preload("res://scenes/smoke.tscn")
		var smoke_instance = smoke_scene.instantiate()
		smoke_instance.position.x = position.x
		smoke_instance.position.y = 960
		get_parent().add_child(smoke_instance)

 

이렇게 수정을 해주게 되면, rock 의 부모인 rock_spawner 에게 smoke 를 입양 시키고, rock 은 소멸하게 돼요!

그러면 단지 rock 만 사라지기 때문에 정상적으로 실행이 됩니다.

 

기본적으로 고도엔진에서는 카메라를 자동으로 지원해 주는데요

저희는 카메라의 위치나 그런 것 등을 조절해 줘야 해서 그냥 넣어 줬어요

 

game.gd 에서

func _on_player_hit():
	print("Player Hit (Game)")
	$Camera2D.shake(1)	# 1초 떨리고, 5만큼 떨기
	$GameUI/RemainHealthCountText.text = "x " + str($Player.health)

 

이렇게 작성을 해주면 돌이 맞았을 때 화면이 떨리게 할 수 있어요.

 

이제 또 BGM 이 없으면 게임이 밋밋하니까 BGM 도 넣어줫어여.

이것은 게임이 시작하자 마자, 즉 ready 시점에 SFXPlayer 노드를 가져오면 됩니닷.

 @onready var sfx_player = $"../../SFXPlayer"

 

이렇게 해주면 이제 저희의 게임은 완성입니닷.

 

너무너무 귀여워요... ㅠㅠ 으아앙

제가 뭔가 설명할 내용을 굉장히 많이 빼먹은 것 같지만.. 오늘은 코드를 중점적으로 작성하였고

child node 를 추가하는 것이나.. 그런 건 설명하지 않았어요!

 

그래서 제 설명을 보고 따라하지는 마시고, 그냥.. 감만 익혀주세요..

저도 복습용으로 블로그를 쓰는 것이므로..ㅠ 주저리주저리 작성합니다.

그럼 모두 행복한 하루 되세요~

'레쭈고 godot' 카테고리의 다른 글

godot 13차시  (0) 2024.11.26
godot 12차시  (0) 2024.11.19
godot 10차시  (3) 2024.10.31
godot 9차시  (0) 2024.10.23
godot 8차시  (1) 2024.10.20