4. 게임 루프의 이해
Last updated
Last updated
본격적인 게임 제작에 앞서 우리가 만들게 될 게임 프로그램의 기본 동작구조를 이해할 필요가 있다.
엔트리 블록코딩에서 일반적 코딩이 어떠했는지를 먼저 기억해보자. 일반적으로 먼저, 화면에 등장시킬 1개 이상의 주인공 오브젝트들 불러와 화면에 위치시켰고, 이후 각각의 오브젝들이 게임에서 각자 해야할 행동들에 대해서 오브젝트별로 개별적으로 코딩을 했다. 이후 완성된 게임을 실행했을 때도, 각각의 오브젝트들이 각자 독립적으로 동시에 실행되고, 심지어 한 오브젝트 안에서 "시작하기 버튼을 클릭했을 때"를 2개 이상 배치해 마치 병렬적()으로 행동하는 것처럼 동작하였다는 것을 기억할 것이다.
파이썬 언어와 파이게임제로 라이브러리로 코딩하는 것은 기존에 블록코딩하던 것과 유사한 것도 있지만, 다른 부분도 상당히 있다. 가장 크게 다른 부분이 바로 아쉽게도 이제는 더이상 각각의 주인공 오브젝트들이 독립적이고 동시적(concurrency)으로 행동하는 것으로 간주하고 코딩할 수 없고, 모든 주인공 오브젝트들의 움직임을 한 곳(게임 루프)에서 관리하고 통제(콘트롤) 한다는 것을 전제하고 코딩해야 한다. 그것을 그림으로 표현하면 다음과 같이 끊임없이 반복되는 무한루프(특별히 게임에 사용하는 루프구조라고 하여 게임루프라 부름) 안에서 게임이 실행되게 되는 것이다.
그림에 표현된 것처럼 게임루프에서는 크게 3가지(게임 오브젝트를 화면에 그리기, 게임 오브젝트의 움직임 처리, 사용자의 조작에 의한 키보드/마우스 등의 이벤트 처리)를 루프를 돌면서 끊임없이 처리하게 된다.
다음 시간부터는 이에 대한 이해를 바탕으로 본격적인 게임 코딩을 해보도록 하겠다.
만약 우리가 파이게임제로 라이브러리가 아닌 파이게임 라이브러리으로 코딩을 하고 있다면, 저 게임루프의 구조를 만드는 것도 우리에게 할당된 몫으로, 우리가 직접 만들면서 코딩해야 한다. 하지만, 파이게임제로는 초보자들을 배려해 그 부분을 의도적으로 숨기고, 위에서 언급한 3가지의 반복처리 사항을 사전에 콜백함수(draw, update, on_mouse / on_key)로 만들어 놓았고, 그 콜백함수에 맞춰 코딩하면 되도록 초보자들을 위해 코딩하기 더 쉬운 구조를 만들어 놓았다. 다행히 우리는 이미 엔트리-파이썬에서 이미 에 맞춰 파이썬 코딩하는 것을 해보았기 때문에 이런 구조에 어렵지 않게 적응할 수 있을 것이다.