我正在寫我自己的小遊戲引擎。 爲了將選項菜單與主菜單和主遊戲等分開,我想到了創建一個狀態系統,其中上述所有內容都是自己的狀態。 引擎main-loop在當前狀態上調用tick()方法。 但是現在引擎對狀態之間的交互,何時切換狀態等一無所知。 爲了解決這個問題,我實現了以下內容: tick() - 狀態方法返回一個模板類型:commandset。 引擎獲取Eventhandler來處理tick()方法的返回值。 它看起來像這樣:解決細胞依賴
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可以與引擎進行交互。 (可變處理程序是StateHandler類型的)
現在,當我想測試所有內容,並編寫測試狀態和處理程序時,我遇到了麻煩。 對於後來的使用,我打算使用一個類作爲處理程序,但爲了簡單的測試目的,我想使用一個函數。 所以當我想寫這個函數的時候,我注意到,我不能定義第二個參數,引擎,因爲它的模板參數是函數的類型(這取決於引擎的類型,這取決於函數鍵入...)。
現在我的問題:我如何定義處理程序?或者是整個想法垃圾? (這真的很悲慘,因爲我有點喜歡它)
,把'的#pragma once'在所有的頭頂部,看看這有多幫助。 – Yann 2014-09-29 12:44:22
我確實在每個頭文件中使用了一次雜注。據我所知,這與我的問題 – Uzaku 2014-09-29 12:46:24
沒有關係嗎? – gldraphael 2014-09-29 12:57:56