2017-05-28 37 views
0

我wan't知道我怎麼能提高我處理事件SFML方式:SFML解析事件代碼

所以我有一個函數調用processEvents(),有對事件類型的開關,我也對每種類型都有一個函數(如mousePressed,mouseReleased,keyPressed ...)。我的問題是這些函數的大小,因爲我也有一個遊戲狀態的枚舉類,所以在每個函數中都有一個開關,並且在每種情況下我都做了不同的事情,結果是例如mouseReleased長341線。

我想知道如何解析更好的事件以減小函數的大小。

+0

拆分成多個較小的函數? –

+0

看看[托爾行動](http://www.bromeon.ch/libraries/thor/tutorials/v2.0/actions.html) –

+0

謝謝,看起來很有趣 – sleiphir

回答

0

你可以有一個std::vector<bool> down和用於索引的關鍵代碼或鼠標按鈕(所以一個矢量鍵盤和另一個鼠標)。然後,當收到事件按下時,您只需執行down[event.key.code] = true,並在收到發佈的事件時將其設置爲false

+0

更好地使用'std :: map'然後,所以你不必映射所有可能的值,即使它們沒有被使用。 – Mario

+0

@Mario'std :: unordered_map'會更好,但更好的是,考慮到同時按下鍵的數量總是很低(即使有人抨擊他們的鍵盤,它可能<30),一個簡單的'std :: vector用線性查找更好。 – Aidiakapi

+0

不,std :: map訪問速度慢。而std :: vector 是一個模板專業化,每個布爾值在內存中只佔用一點,所以那好吧:) –

0

您實際上想要分散處理代碼。使各種組件能夠在某個'sfml event-dispatcher'對象上爲事件註冊處理程序。該對象的唯一工作是在事件到達時調用相應的處理程序(可以使用std :: function表示),而不必知道該處理程序的確切內容。

+0

謝謝,我不知道std :: function如何工作,但我可以學習:) – sleiphir