2011-03-14 46 views
0

我正在開發用C++編寫的小型蛇遊戲,並使用SFML 2D庫。問題是:爲了使一個窗口,在它打印任何東西,你必須通過如何管理SFML渲染,「信號」的方式?

while (App->IsOpened()) 
{ 
    //Do the stuff 
    App->Clear(); 
    App->Display(); 
} 

,使其但是,我想在一個更通用的方式來建立我的程序,這將使我能夠初始化窗口,然後從while語句外部向其發送信號,如「RenderARect」或「ClearTheWindow」。它會讓我使用我的渲染類實例作爲例子的動態庫,使遊戲代碼和渲染代碼兩個不同和獨立的東西...

你會有任何建議如何實現這樣的信號系統到我的SFML程序?

PS:我耳中libsigC++的,但對如何實現它不知道......

謝謝!

回答

4

有沒有必要發送這樣的信號。所有東西都應該在while循環(主循環)中進行處理,並且每個幀都應該被清除,並且單獨繪製並且作爲一個整體繪製,而不是在區域中繪製,因此SFML使用OpenGL。

將遊戲邏輯與主循環分開的最明顯的方法是製作遊戲OOP。 當然,它將把它分離成單獨的邏輯單元,在單獨的文件中,但它們將在同一個循環中「一起」運行。我認爲這是所期望的(但至少可以接受的)行爲。

所以你將有一個Game類,它將有一個Update()方法。這是遊戲邏輯發生的地方,處理事件(最好是在調用之前查詢事件並作爲參數傳遞給Update()),並且必須更新所有事件的狀態。 你應該在主循環的每一次迭代中調用它。

而且該類還將具有Render()方法,該方法將根據需要繪製所有內容。

因此,這將是這樣的:

while (App->IsOpened()) 
{ 
    Game->Update(); 
    App->Clear(); 
    Game->Render(); 
    App->Display(); 
}

P.S:對不起,我的英文不好,我希望你能理解。

+0

謝謝你的幫助,但實際上,我真的需要用信號系統來實現它。我的遊戲類必須與許多圖形庫兼容,將它們作爲動態庫加載。 所以,我需要我的遊戲類能夠以通用的方式調用Update,clear等,而不會打擾一會兒......這樣,我可以輕鬆實現Qt或GtkMM。 我可以做出類似 Current = game-> Init(); Current-> Update();當前 - >清除(); – Oleiade 2011-03-14 12:25:33

+1

哦,那麼你應該真的使用libsigC++。對不起,我無法幫助您閱讀這本圖書館,因爲我不太熟悉它。 – torokati44 2011-03-14 12:37:37