처음 만드는 게임을 다 만들었습니닷!
일주일 전에 배웠던 내용을 지금 쓰고 있어서 굉장히 기억을 더듬어야 하지만.. 이 또한 제 업보 아니겠나요...
그리고 이러면서 복습이 된다고 생각합니다.
지금은 돌이 떨어졌을 때 연기가 나는 모션을 넣는 과정입니다.
우선 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 |