컴퓨터 게임은 다음과 같은 끝없는 루프입니다.
- 업데이트 : 게임 상태를 1/80 초와 같은 작은 시간 조각으로 진행하십시오.
- 현재 게임 상태를 그립니다.
이들의 변형이 있습니다. 일부 게임은 각 페인트 사이에 더 많은 업데이트가 있거나 다른 컴퓨터에서 게임 흐름을 동일하게 매끄럽게 만들기 위해 변경 될 수 있습니다. 그러나 그것은 기술적 세부 사항입니다.
초당 50에서 100 번 사이에 발생하는 업데이트 단계 (그렇습니다)
- 게임 물리를 업데이트하십시오. 액터에 속도가 있다고 가정하십시오. 업데이트는 그를 올바른 방향으로 조금 움직여야합니다. 또한 물리 엔진을 사용하는 경우 다른 액토 또는 장애물과의 충돌을 확인해야합니다.
- 게임 규칙을 업데이트하십시오. 이것이 물리 실험이 아닌 게임이되는 이유입니다. 총알이 플레이어 액터에 부딪쳤다 고 가정하십시오. 게임 규칙은 플레이어에게 체력의 X 포인트를 빼고 총알이 사라지게합니다.
- AI 업데이트. 때때로 컴퓨터 제어 행위자는 무엇을해야할지 고민해야합니다. 왼쪽이나 오른쪽으로 이동? 좋은 곳으로가는 길을 찾으십시오. 무기를 발사하십시오.
- 입력 제어. 키보드에서 누른 버튼에 따라 플레이어 액터를 업데이트합니다.
- 장면 그래프를 업데이트하십시오. 이것은 애니메이션을 한 단계 진전 시키거나 GUI를 업데이트하여 플레이어의 체력이 10 점 낮음을 표시 할 수 있습니다. 게임의 외관과 느낌을 좋게 만드는 것이 유일한 목적입니다.
어디서 시작하니?
그래픽 게임의 기본 요구 사항은 그래픽을 프로그래밍하는 것입니다. 창을 열고 그 안에 공을 그릴 수 있는지 확인하십시오.
나는 당신이 어떤 종류의 수업을 만들 수 있다고 가정합니다. Ball 클래스를 만드십시오. x, y, deltaX, deltaY 멤버가 있습니다. 모두 정수와 픽셀 단위입니다. 이제이 루프를 작성하십시오.
forever, do this {
start measure time (in milliseconds)
//physics part
add deltaX to x
add deltaY to y
if x is bigger than the screen width, assign -deltaX to deltaX
if y is bigger than the screen height, assign -deltaY to deltaY
if x is less than 0, assign -deltaX to deltaX
if y is less than 0, assign -deltaY to deltaY
//paint
paint the ball at x, y
stop measuring time, assign this to workTime
make the thread sleep for (25 - workTime) milliseconds
}
그러면 창 경계가 공을 튀어 오릅니다. 아직 게임이 아니라 실제 시뮬레이션입니다. 볼 클래스 내에 볼 물리 업데이트를 작성하면 여러 볼을 쉽게 추가 할 수 있습니다. 그것들을 목록에 저장하고 각 프레임마다 하나씩 업데이트하고 페인트하십시오.
패들 (물리 시뮬레이션 및 마우스 또는 키보드로 제어 가능)과 공이 왼쪽 벽에 닿지 않도록 막는 등 게임 목표를 추가 할 수 있습니다. 게임이 시간이 지남에 따라 점점 더 많은 공을 추가하면 난이도가 증가합니다. 게임이 있습니다.
왜 (25-workTime) 밀리 초 동안 잠 을 자나요? 이렇게하면 시뮬레이션이 초당 40 개의 업데이트와 페인트의 일정한 속도로 실행됩니다. 꽤 부드럽습니다. 수면 부분을 건너 뛰면 애니메이션이 끊기고 CPU를 100 % 차지합니다. 또한 공의 속도는 공을 돌리는 기계의 속도에 달려 있습니다. 이제 볼 수직 속도는 초당 40 * deltaY 픽셀입니다.