我目前正在製作一個C++遊戲。 我有我的主循環,其間的邏輯計算,然後畫的精靈等 我想實現「對話框窗口」:當你按下一個NPC前面的觸摸,彈出一個對話窗口的底部屏幕上,你被凍結,直到你按下一個鍵,但遊戲繼續運行(其他角色正在移動等),所以主循環仍在運行。 我設法做到這一點就好了:當一個對象被激活,它將發送一個消息,而本場比賽繼續運行時顯示的文本窗口對話管理器,所以它看起來像:無模式對話框窗口的優秀設計是什麼?
object::OnActivated() {
GameManager::doWindow("some text");
//the game is not blocked here, the game continues to run normally and will display a window on the next frame
}
現在問題就來了當我想要在對話結束後發生某些關聯操作時,或者例如如果您對某個問題選擇了「是」時。我想有一個會像這樣工作的落實:
object::OnActivated() {
GameManager::doWindow("some text");
if(GameManager::Accepted()) addGold(100);
}
的問題是,這種檢查&行動將盡快在窗口創建活動進行,而不是在關閉窗口/ acepted 。有沒有辦法做到這一點,同時保持OnActivated()函數中的相關操作?我不知道如何正確地做到這一點,而不使用函數指針,這會迫使我對每個我可以用作結果的方法都有一個特定的簽名。 謝謝
編輯:我發佈了一個賞金,因爲我想知道什麼是對這個問題最「典型」的答案。我想這是一個非常普遍的問題(對於很多應用程序和每個現代遊戲),我希望有一個儘可能靈活的解決方案,因爲我不能從今天列出所有可能的「後果」 「對話可能觸發。 更多信息: - 每個對話框將由來自共同「實體」類的對象觸發 - 來自同一類的不同對象幾乎總會有不同的對話/動作關聯(例如,所有NPC對象會沒有相同的對話框) - 我不關心如何將「對話邏輯」移出OnActivated方法,甚至不在Entity類之外。無論如何,這會發生,因爲我希望能夠爲每個NPC添加「隨機」對話框場景,所以對話框等將存儲在別處 - 但我想保持對話框邏輯本身儘可能接近一個對話框。理想情況下,我希望能夠做到像這樣:「result = dialogWindow(」question?「); if(result){...}」。我不確定這是可能的,但
這屬於GameDev.SE,我將其標記爲移動。 – Xeo
@Xeo:不是。他只是想讓相當於無模式的對話窗口,它並不重要,它是用於遊戲。 – Jon