2011-10-21 6 views
0

알레그로 5를 사용하여 C++로 게임을 쓰고 있습니다. 알레그로 5에는 이벤트 대기열에 쌓인 이벤트가 있습니다 (예 : 마우스 클릭 또는 1/FSP 시간 후에 타이머가 틱). 그래서 내 질문에 내 게임의 메인 루프의 논리가 있어야합니다, 또는 이후 그것은 메인 루프없이 구현할 수있는 이벤트 기반으로 ??게임 메인 루프 로직

실제 게임에서 어떤 아이디어가 있습니까? 링크가 좋을 것입니다.

+0

@Vlad 일부 링크입니다 : 그것은 기반 이벤트가 있다면, 당신은 이벤트를 전달하기 위해 메인 루프가 필요합니다. –

+2

http://gamedev.stackexchange.com/questions/651/tips-for-writing-the-main-game-loop – user786653

+1

참조하십시오 http://stackoverflow.com/faq#editing –

답변

0

내가 너무 알레그로와 어떤 경험이없는 있지만 논리가 동일 할 것입니다.

(소위) 실제 게임에도 게임 루프가 있지만, 다른 게임은 병렬로 작동하지만 다른 시간 간격 내에서 쓰레드를 사용합니다. 예를 들어, 물리 계산, 인공 지능, 게임 플레이, 사운드, 렌더링을위한 다양한 스레드가 있습니다. 사용자 이벤트는 일반적으로 콘서트이므로 게임 플레이 이벤트는 (Max가 제안한대로) 수집되고 다음 프레임까지 소비됩니다 (실제로 일부는 예를 들어 5 프레임).

프레임이 너무 길어질 수 있으므로 이러한 입력을 버퍼링 된 입력이라고하기 때문에 게임에서 모든 이벤트가 수집됩니다. 또한 이산 적이 지 않은 unbuffered input이라 불리는 또 하나의 메소드가 있습니다. 대신에 그것이 쿼리 된 바로 그 순간에 gameloop 동안 테스트합니다.

사용자 입력이 매우 중요하고 입력을 전혀 잃어 버리지 않으려면 버퍼링되지 않은 버퍼링을 사용할 수 있습니다. 그러나 버퍼되지 않은 디버깅 중에 특히 까다로울 수 있습니다. 여기


book excerpt game engine
Game Loops on IOS

1

Allegro에 대한 경험이 없지만 SFML을 사용하고 OpenGL을 사용하여 게임을 렌더링 할 때 나는 메인 루프의 일부로 이벤트 대기열을 폴링합니다. 아래 의사 코드 (하지만 더 추상화 된) 같은 뭔가 :

while(game_on) 
{ 
    auto events = poll_occured_events(); 
    for_each(events, do_somewithng_with_event); 

    render_game(); 
} 

나는 비슷한 알레그로 가능하다 추측에는 요 ... 지금까지 잘 작동하는 것 같다. 이벤트 주도 게임은 게임을 지속적으로 업데이트해야하기 때문에 까다 롭습니다.

당신은 (아마도) 다른 스레드의 메인 루프를 한 후 이벤트 스레드 및 게임 스레드 사이에 동기화 할 수 있습니다 ...