IT 대장간

게임만들기 - [2] 캐릭터 이동, 프레임, 충돌처리 본문

Programing/Python

게임만들기 - [2] 캐릭터 이동, 프레임, 충돌처리

태장장이 2021. 2. 25. 15:54

4. 캐릭터 이동

1) 좌표이동에 대한 변수 선언 (to_x, to_y_

2) 키 입력 이벤트를 받는 event.key에 입력값에 대한 반응을 추가한다

 - KEYDOWN은 키가 눌린 상태를 의미

 - KEYUP은 키 입력을 멈췃을때를 의미

 - 키보드 입력을 멈췃을떄 to_x,y = 0 을 통해 이동을 중지

3) 조작 완료 후 캐릭터 현재 좌표값인 (character_x(y))_pos 변수에 이동 된 만큼(+) 값을 저장

 

4) 캐릭터가 화면 바깥으로 사라지는 것을 막기위해 while문 바로 하단 경로에 위와같이 처리

: 오른쪽이동과 아래쪽이동을 보면 일부 상쇄되는 계산식이 있는데 

그 이유는,

캐릭터의 좌표역시 좌측상단꼭지점을 기준으로 잡히는거다보니까 좌측상단이 화면밖으로 넘어가지않고 

걸치는 경우가 발생함

잘못된 예) 캐릭터 이동시 화면 끝에 걸치는 현상

5. 프레임

 

이동속도와 관련하여 섬세하게 할 경우 변수로 지정, 연산수행도 가능 

1) pygame.time.Clock()을 통해 clock라는 객체를 생성

2) 이후 게임속도 조절을 위한 dt 변수 생성과 동시에 clock.tick 함수를 사용해 60FPS로 지정

 

주의) 프레임수는 캐릭터의 속도와 상관관계가 깊으므로 무조건적으로 높거나 낮다고 좋은 것이 아니며

본 게시글에 제작중인 게임은 30프레임과 60프레임이 가장 버벅이지 않고 자연스럽게 움직임

 

그 외 조작 후 캐릭터의 최종위치 = to_x * dt 와 같은방식으로 속도조절도 가능함.

 

6.적 충돌

: 일반적인 게임에서 라이프 -1, 또는 Gameover가 나올만한 이벤트라고 생각하면 된다. 본 게임에서는 타겟과 직접적인 충돌시 이벤트 발생

 

1) 주인공 조작 캐릭터 처럼 타겟 또한 동일하게 생성한다 최초 위치의(x_pos)의 경우 다르게 지정

 

 

2) 주석문을 잘읽어봐야 한다.

요약하자면 위에서 코드 상단부 캐릭터와 enemy에 대해 선언 및 정의한 부분에서는 코드 순서상 get.rect()를 통해 사이즈만 받아갔고 배치만 했을뿐 그냥 껍데기만 있는 이미지라고 보면 된다.

 

3)반복문 내부에 캐릭터와 적의 rect값을 받고 위치를(x(y)_pos) 실시간 체크하여 충돌처리할 수 도록 left와 top에 저장해준다

 

4) colliderect(enemy_rect) 

-> 캐릭터 rect가 (enemy_rect)에 colliderect (닿았을경우) 

running값으로 True를 받던 while문에 False값을 주어 종료한다

 

 

 

현재까지 진행된 프로그램:

 

오브젝트 생성

.

 

부딫혔을 경우