나는 작은 게임 엔진을 쓰고 있습니다. 메인 메뉴와 메인 게임에서 옵션 메뉴를 분리하는 방법으로 위에서 언급 한 모든 것이 자신의 상태 인 상태 시스템을 만드는 방법을 생각했습니다. 엔진 main-loop는 현재 상태에서 tick() 메소드를 호출합니다. 그러나 이제 엔진은 상태 간 상호 작용, 상태 전환시기 등을 전혀 알지 못합니다. 이 문제를 해결하기 위해 다음을 구현했습니다. tick() - 상태 메서드는 템플릿 유형을 반환합니다 : commandset. 엔진은 tick() - 메서드의 반환 값을 처리하기 위해 Event Handler를 가져옵니다. 은 다음과 같습니다서클 의존성 해결
template<class StateHandler, typename FeedbackType>
void Engine<StateHandler, FeedbackType>::run()
{
run = true;
clock.restart();
while (run)
{
sf::Time elapsed = clock.restart();
Win->clear(sf::Color::Black);
processEvents();
if (!pause)
{
Handler(currentState->tick(elapsed), *this);
if (overlayState != NULL)
Handler(overlayState->tick(elapsed), *this);
}
Win->display();
}
}
그래서, 엔진이 틱의 반환 값에 대한 핸들러를 호출하고 자신을 전달합니다. Handler는 엔진과 상호 작용할 수 있습니다. (Variable Handler는 StateHandler 타입입니다.)
이제 모든 것을 테스트하고 Teststate와 핸들러를 썼을 때 문제가 발생했습니다. 나중에 사용하기 위해 클래스를 핸들러로 사용하려고했지만 간단한 테스트 목적으로 함수를 사용하려고했습니다. 그래서 함수를 작성하고자 할 때, 두 번째 매개 변수 인 엔진을 정의 할 수 없다는 것을 알았습니다. 템플릿 인수는 함수의 유형 (함수에 따라 달라지는 엔진 유형에 따라 다르기 때문에)입니다. 유형 ...).
이제 내 질문 : 어떻게 처리기를 정의 할 수 있습니까? 아니면 전체 아이디어가 쓰레기입니까? (그것은 정말 비극적인데, 나는 그것을 좋아하기 때문에)
을, 당신의 모든 헤더 상단에'의 #pragma once'을 넣어, 그 얼마나 많은 참조 도움이됩니다. – Yann
모든 헤더에 pragma를 한 번 사용합니다. 내가보기 엔, 그건 내 문제와 관련이 없다. – Uzaku
앞으로 선언을 시도해 봤어? – gldraphael