要怎麼跟視窗互動呢?使用者在視窗上互動時,SFML 會產生事件(Event),進而接收窗口的事件,並針對發生的事件(例如:滑鼠移動、點擊,鍵盤點擊等)做相對應的處理。
1 | sf::Event event; |
SFML 總共有以下這幾種事件:
sf::Event::Closed- 視窗關閉
sf::Event::LostFocus,sf::Event::GainedFocus- 選擇/隱藏 視窗
sf::Event::Resized- 視窗大小調整
- 資料
event.sizeevent.size.width寬event.size.height高
sf::Event::TextEntered- 文字輸入
1 | if (event.type == sf::Event::TextEntered) |
sf::Event::KeyPressed,sf::Event::KeyReleased- 鍵盤按下/放開按鍵
- 會有延遲(跟在文字編輯器上打字一樣),如果不希望有延遲請用 Real-time Input
- 可以把關閉重複的事件(當按鍵持續按下)
window.setKeyRepeatEnabled(false)
1 | if (event.type == sf::Event::KeyPressed) |
sf::Event::MouseWheelScrolled- 滾動滑鼠滾輪
- 資料:
event.mouseWheelScrollwheel哪種滾輪sf::Mouse::Wheel::VerticalWheelsf::Mouse::Wheel::HorizontalWheel
delta位移量 (正代表上、左,負相反)x,y座標
1 | if (event.type == sf::Event::MouseWheelScrolled) |
sf::Event::MouseButtonPressed,sf::Event::MouseButtonReleased- 滑鼠按鍵
- 資料:
event.mouseButtonbutton按鍵x,y座標
1 | if (event.type == sf::Event::MouseButtonPressed) |
sf::Event::MouseMoved- 滑鼠移動
- 只有在視窗內才會產生此事件
1 | if (event.type == sf::Event::MouseMoved) |
sf::Event::MouseEntered,sf::Event::MouseMouseLeft- 滑鼠進入視窗、離開視窗
此外還有跟搖桿有關的事件,但這裡省略
參考
SFML2.5 Tutorial Events explained
https://www.sfml-dev.org/tutorials/2.5/window-events.php
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)