2011-02-19 5 views
2

현대 게임 루프에 대해 가장 싫어하는 것은 무엇입니까? 게임 루프가 향상 될 수 있습니까 아니면 이벤트 구동 아키텍처와 같은 더 나은 대안이 있습니까?게임 루프가있는 가장 큰 쇠고기

+2

질문이 아닌가요? –

답변

1

그것은 다음과 같이 보인다 정말 내가 지금하는 대학원 수준의 게임 엔진 프로그래밍 코스를 수강하고있어 그들이 게임 루프 방식을 고수하고

... CW되어야한다. 물론 이것이 유일한/최선의 해결책이라는 의미는 아니지만 확실히 논리적입니다. 루프를 사용하면 모든 게임 시스템이 자신의 시간 초과 인터럽트 나 다른 것을 요구하지 않고도 실행되도록 할 수 있습니다. 컨트롤은 중앙 집중화 될 수 있습니다 : 현재 프로젝트에서 각 프레임은 모든 등록 된 개체에 대해 Update(float deltaTime) 함수를 차례로 반복하는 GameManager 클래스를가집니다. 이벤트 시스템을 디버그하거나 시간이 설정된 신호를 설정할 필요가 없습니다. 루프를 사용하여 일련의 함수를 호출합니다. 불평, 호들갑.

내가 싫어하는 것에 대한 여러분의 질문에 답하기 위해 루프 접근법은 상속과 다형성을 자유롭게 사용하여 객체의 크기/복잡성을 부 풀릴 수 있습니다. 조심하지 않으면 경미한 함정이 될 수 있습니다. 조심하면 문제가되지 않을 수도 있습니다.

0

게임에 이벤트가 있는지 여부에 관계없이 게임은 게임 자체를 그려서 고정 된 속도로 업데이트해야하므로 게임 루프를 삭제할 수 있다고 생각하지 않습니다. 아직도 나는 누군가가 게임 루프의 다른 대안을 생각할 수 있는지 궁금해 할 것이다.

+0

이벤트 구동 아키텍처로 대체 할 수 있는지 궁금합니다. 그러나 이것이 어떻게 효과가 있을지 확신하지 못합니다. –

+3

-1 게임 루프와 렌더 루프가 같은 루프가 아니어야합니다. 그렇지 않으면 게임 루프에 심한 생각을 할 때 애니메이션이 정지됩니다. – corsiKa

+0

@ cable729 모든 게임은 기본적으로 이벤트 중심 아키텍처입니다. 게임 루프는 게임이 입력을 영원히 기다리지 않고 있는지 확인하는 것입니다. 기본적인 스네이크 게임의 예를 생각해보십시오. 플레이어가 아무런 입력도하지 않으면, 뱀은 여전히 ​​앞으로 움직이게되어 일정한 간격으로 렌더를 업데이트하는 것만 가능합니다. – jitendragarg

0

일반적으로 이벤트 기반 아키텍처는 게임에 가장 적합합니다 (사용자가 무언가를 원할 경우에만 수행). 하지만 항상 세계를 다시 그리는 스레드가 있어야합니다.

0

완전히 이벤트 기반이되도록하려면 x 밀리 초마다 CPUTick 이벤트를 이벤트 대기열에 넣는 추가 스레드를 생성 할 수 있습니다.

JavaScript에서는 setInterval()을 사용하여 이벤트를 보내는 추가 '스레드'를 쉽게 만들 수 있기 때문에 일반적으로 더 자연스러운 경로입니다.

또는 JS가 브라우저에 있거나 파이썬이 꼬인 상태 인 게임을 포함하는 프레임 워크에 이미 루프가있는 경우 루퍼가 일정한 간격으로 다시 전화를 걸 수 있음을 알 수 있습니다. 예 :

function gameLoop() { 
    // update, draw... 
} 
window.setInterval(gameLoop, 1000/fps); 
관련 문제