gdscript 11

godot 13차시

요즘 너무너무 바빴어서 블로그를 작성하는 게 살짝 늦었네요....너무 늦었나요.. 하하....복습 겸 들렸기 때문에.. 간략하게 쓰도록 하겠씁니닷.11/19extends Node2Dclass_name Staircasevar staircase_directionsvar stair_countconst 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 중 ..

레쭈고 godot 2024.11.26

godot 12차시

오늘은 새로은 프로젝트를 했어요~바로 무한의 계단과 같은 게임을 만들기 위해... 새 프로젝트를 만들고, 필요한 이미지들을 다운 받았어요! 입력 설정에서 키보드에 따른 action 을 지정해 줬어요! 맨날 하던 것을 해 주었답니닷.맨날 하던 것처럼 애니메이션을 불러와서 적당히 크기를 잘라줬어요. 플레이어는 항상 배경보다 앞에 있어 줘야 하기 때문에 Z index 를 1로 주었답니닷.extends Node2D# 가급적 습관적으로 클래스 이름을 붙여주기, 외부에서 클래스 내용을 참조해야 한다면 반드시 붙여주기class_name Player# 왼쪽, 오른쪽 방향으로 바라보는 메서드 정의func turn_left(): scale.x = -1 func turn_right(): scale.x = 1 여기서 scal..

레쭈고 godot 2024.11.19

godot 11차시

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

레쭈고 godot 2024.11.10

godot 10차시

오늘은 캐릭터가 돌에 맞으면 일정 시간 동안 무적을 유지하다가 지정한 시간이 끝나면 다시 돌에 맞게 하는 코드를 작성했어요!오늘은 별로 어려움은 없었지만.. 집중력이 흐뜨러지는.... ~_~ 우선 코드~~~extends Node2Dsignal player_hitconst SPEED = 400const CHARACTER_WIDTH_HALF = 40var healthvar dead = falsevar invincible = falsevar invincible_timer = Timer.new()var invincible_time = 2# Called when the node enters the scene tree for the first time.func _ready(): $AnimatedSprite2D.pl..

레쭈고 godot 2024.10.31

godot 9차시

오늘도 godot 을 열심히 공부했답니닷!~!오늘은 script 코드가 너무 왔다 갔다 했어서 공부하는데.. 많이 헷갈렸어요... T-T 처음에는 player.gd 에 signal player_hit 을 추가 시켜줍니다.player 는 맞았으면 "나 맞았어" 라고 알려주기만 하면 돼요!func hit(): player_hit.emit() on_dead() 그리고 그 함수에서 emit() 을 호출해 줍니다.emit() 은 신호를 보내주는 역할을 해요! 그러면 이제 누군가는 반응을 해야겠죠?이때 반응은 game 이 해 줍니다! 돌 씬이 할 일은 없고, 돌을 뿌려주는 씬도 반응 할 일이 당연히 없으니 game 밖에 반응할 게 없어요!그래서 game 에서 이 함수를 $Player.player_hit.connec..

레쭈고 godot 2024.10.23

godot 8차시

중간고사와 여러 행사로 인해 고도엔진을 몇 주 만에야 들었습니닷.....오랜만에 수업 듣는 거라... 정말 단 하나도 모르겟더라구요....복습을 미리 하고 갔어야 하는 것이지만... 중반부터는 나름 잘 따라갔습니닷. 저번에 Timer 노드까지 추가해 주었는데요~저희가 Timer 를 추가해서 일정 기간 동안 생존 해 있으면 게임이 끝나는 것으로 할 거예요!그러한 방식으로 작동하기 위한 코드가 바로extends Node2Dvar remain_timesfunc _ready(): $GameTimer.start() remain_times = 20func _process(delta): passfunc _on_game_timer_timeout(): remain_times -= 1 if remain_times == 0..

레쭈고 godot 2024.10.20

godot 7차시

우선 저희가 만든 RockSpanwner 는 script 코드만 있는 특별한 노드입니다!여기서 자식 노드로 Timer 를 추가해 주면 되는데요! 여기서 wait time 몇 초 동안? 할 것인지 여부를 결정하는 것이고, one shot 한 번만 할 것인지 여러 번 할 것인지, autostart 자동 실행 할 것인지 아니게 할 것인지를 결정하는 것입니다!extends Nodevar window_size# 난수 발생기 객체 생성var rng = RandomNumberGenerator.new()func _ready(): # 뷰포트 사이즈 얻어오기 window_size = get_viewport().get_visible_rect().size print(window_size)func _process(delta):..

레쭈고 godot 2024.09.27

godot 6차시

너무너무 오랜만이라서 혹시 고도엔진을 잊고 계셨나요.....사실 저도 잊고 있다가 너무너무 오랜만에 수업을 들으니까 어색하면서도 재밌었습니다! 저희가 저번 시간에 돌 씬까지 만들어줬는데요!돌씬은 지금 만들어 주기만 했으니 아직 작동은 하지 않는 상태입니다.하지만 저희는 이 돌이 위에서 아래로 떨어지게 해 줘야 돼요!그래서 등장한 코드가 바로extends Node2Dvar speed = 400func _ready(): passfunc _process(delta): position.y += speed * delta 입니다. 하지만 이렇게 돌이 쭉 일정한 속도로 내려오면 게임이 너무 재미가 없잖아요?!그렇기 때문에 가속도를 지정해 줘서 speed 에 지속적으로 더해 줘야 해요!그럼 speed 의 값은 변하기 ..

레쭈고 godot 2024.09.26

godot 5차시

만약 이렇게 캐릭터를 뷰포트의 가장 하단 중앙에 두고 싶다면 Position x 를 260px, y 를 960 px 로 해주어야 합니닷.왜냐하면 저번에 Viewport 의 가로 길이는 520 px 이었기 때문에 그 절반을 해 주고,세로 길이는 그대로 960 px 을 설정하시면 됩니당. 그럼 이렇게 캐릭터가 안정적으로 하단 중앙에 오게 됩니당.ㅎ3ㅎ 하지만 이대로 실행을 하면 코드를 손대지 않았기 때문에 캐릭터가 방향키를 따라 화면 밖으로 빠져 나가게 됩니다.이것을 방지해야겠죠?!그래서 저희는 540px (오른쪽) 을 넘어가면 그냥 540 이라는 값으로 일정하게 쭉 맞춰주고,만약 0 (왼쪽) 을 넘어가면 그냥 0 으로 처리해줄 것입니다.if position.x >= 540: position.x = 540i..

레쭈고 godot 2024.09.13

godot 4차시

오늘은 드디어 델타 값에 대하여 배웠습니다.delta 값이란 ~ 특정 움직임에 무조건 곱해 줘야 하는 것이에요. 델타 값을 출력한 예입니다. 값이 거의 똑같죠?!그리고 delta 를 곱해주어 코드를 수정해 주었습니당.왜냐하면!!!!!!!!사양이 좋은 컴퓨터와 안 좋은 컴퓨터에서의 물리적인 시간이 같아도 이동하는 양이 다를 수 있기 때문에 사용하는 것입니다!process 는 while 문이 true 일 때 안에서 실행돼요! 그래서 버튼을 누르고 있으면 계속 실행됩니당. 왜냐하면 이 또한 while 문이 true 가 되니까요!!!!!그래서 delta 값을 이용하면 사양과 관계 없이 같은 시간에 같은 이동량을 가질 수 있습니다.최종적으로는 이동된 픽셀량만 같으면 해결되는 것이지요~예를 들면 엄청 안 좋은 사양..

레쭈고 godot 2024.09.05