티스토리 뷰

2022.08.13 - [분류 전체보기] - 파이썬 게임 만들기 3탄, 캐릭터 움직이기

 

파이썬 게임만들기 3탄, 캐릭터 움직이기

2022.08.12 - [분류 전체보기] - 파이썬 게임만들기 2탄 배경넣기 파이썬 게임만들기 2탄 배경넣기 1탄에서는 기본설정과 창만 띄었는데 이제는 이벤트 루프를 만들고 게임을 만들어 볼께요 2022.08.12

tlxm2.tistory.com

파이썬 게임만들기 pygame 1탄

파이썬 게임만들기 2탄 배경넣기

파이썬 게임만들기 3탄, 캐릭터 움직이기

파이썬 게임만들기 4탄, 충돌처리하기

파이썬 게임만들기 5탄, 게임 기본 프레임만들기

파이썬 게임만들기 6탄, 무기 만드는 방법

파이썬 게임만들기 7탄, 장애물 이동하기

파이썬 게임만들기 8탄, 무기와 장애물의 충돌처리

파이썬 게임만들기 9탄, 종료하기

fps frame_per_second.py

 

프래임이 높으면 케릭터가 부드럽다 초당 프래임 수로 30 프레임이면 1초에 30번 프레임 나오는 것 1초에 30번 동작하는 것이라고 생각할 수 있음 

14 클락변수를 정해주고 37에 dt 선언해주고 32에 스피드 변수로 해주고 59,60에 dt 곱해줌

37줄에 클락을 10으로 정해준다. 그럼 버벅거리는 것으로 보임. 

그럼 초당 화면에 변화되는 것을 알 수가 있다. 그럼 초당 60 하면 빠르게 움직이는데 10으로 하면 움직임의 속도가 느려짐. 부자연스러운 것은 당연한데 속도는 느려지면 안 됨. 

dt란 것이 출력을 해보면 10 틱일 땐 101이고 60 틱일 땐 17 임. 그래서 아래서 곱해줬을 때 60 틱일 때는 낮게 나와서 보정 효과가 있음. 60 즉 초당 속도를 빠르게 할수록 fps를 빠르게 할수록 dt가 낮아져서 보정해줌. 

 

32 이동속도는 같은 것인데 바꾸어줄 것이니까 그냥 변수만 들고 

그런데 이동속도는 5인데 프레임이 바뀔 때마다 동작속도는 같으면 

캐릭터의 이동속도는 달라진다. 그래서 이동속도를 변수로 만들어서 

프레임이 변해도 이동속도를 같게 해 주려면 프레임 값을 곱해서 보정을 해줌

20 프래임과 10 프레임은 2배 차이니까 프래임 값만큼 곱해줌

 

32 45 이동속도는 변수 화해 줘서 편하게 하고

59에서 위치는 이동속도에 프래임 값 곱해서 보정해준다.(dt)를 하면 10 하면 100이 출력되고 20 하면 50이 출력된다. 즉 높을수록 낮아서 프레임 값만큼 곱해주면 보정됨.

 

너무 속도 빠르면 0.6 정도 바꿈. 

그리고 틱을 60으로 하나 30으로 하나 속도는 같다. 

tick()은 이전호 줄 이후 몇 밀리 초 경과했는지 즉 프레임이 클수록 작은 값, 프레임이 작을수록 큰 값이 나온다, 

 

충돌처리 collision.py

 

미사일이 장애물 격추하거나 주인공이 장애물에 충돌하거나 할 때 쓰임!

 

적 캐릭터를 만들기 위해서 우선 그냥 캐릭터에서 이미지 로드부터 엑스 와이 좌표 가지고 온다 그리고 캐릭터 대신에 에니미로 바꾸어준다 

 

적 캐릭터 생성

색은 노란색으로 채우고 크기는 픽셀로 70*70으로 한다. 그리고 저장한다. 

위치는 화면 중앙에 놓기 위해서 엑스는 그대로 두고 와이축은 중앙에 위치한다.  적을 중앙에 놓기 위해서 와이 좌표값의 높이를 /2를 추가한다. 

 

충돌처리를 하기 위해서 랙트함수를써서 좌표 정보를 가지고 온다.

캐릭터 좌표는 만들어질 때 블릿 함수에서 엑스포스와 와이 포스로 되어 있는 것인데 이제 그것을 수정해줘야 한다. 

85 캐릭터의 레프트와 탑을 엑스 와이 좌표로 업데이트해준다. 그래야지 아래의 콜 라이드 팩트 함수를 써줄 수 있다. 레프트와 탑에 반영을 해줘야 됨. 래프트와 탑만 있어도 위에 88에 겟 렉트 해줘서 가로세로 값은 이미 저장되어 있음.

88 적도 똑같이 해준다. 

92 대상. 콜라이 드랙트(장애물) 함수는 대상과 장애물이 사각형일 때 부딧치는지 확인해주는 함수이다. 

 

글자 넣기 text.py

44줄 정도에 우선 폰트 정의를 하고  폰트는 논으로 해서 기본 폰트 하고 크기를 정해줌

 

폰트 넣어서 시간 만들기!

폰트 객체를 생성하고 폰트명과 크기

 

47 시간 계산을 위해서 10초 안에 끝나는 것으로 만들려고 

50  현재 틱을 받아 옴. 시간 계산하기 직전의 틱(현재시간 정보)을 받아와서 시간이 흐른 뒤 틱을 빼줌

133 빼 주는 건 가장 뒤에서 빼줘야 됨. 배경 그리기 쪽에서 

 

그리고 타이머를 빌트 함수를 통해서 10,10 위치에 그려줌 

 

112 경과시간은 현재시간에서 시작시간을 뺌  1000으로 나눈 것은 ms이라서!

115 랜더 함수는 실제로 그 글자를 써주는 것이다. 토털 시간- 경과시간을 빼면 10 9 8 7 이렇게 나온다. 랜더(출력할 글자 숫자지만 문자열, 트루, 색상)

117 빌더로 그려줌

 

120 총시간이 넘어가면 종료됨. (토털 타임 빼기 익스케이프 타임)

 

 

127 너무 빨리 끝나며 그러니까 마지막으로 2초 정도 대기하고 끝남.