要怎麼跟視窗互動呢?使用者在視窗上互動時,SFML 會產生事件(Event),進而接收窗口的事件,並針對發生的事件(例如:滑鼠移動、點擊,鍵盤點擊等)做相對應的處理。
1 | sf::Event event; |
SFML 總共有以下這幾種事件:
sf::Event::Closed
- 視窗關閉
sf::Event::LostFocus
,sf::Event::GainedFocus
- 選擇/隱藏 視窗
sf::Event::Resized
- 視窗大小調整
- 資料
event.size
event.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.mouseWheelScroll
wheel
哪種滾輪sf::Mouse::Wheel::VerticalWheel
sf::Mouse::Wheel::HorizontalWheel
delta
位移量 (正代表上、左,負相反)x
,y
座標
1 | if (event.type == sf::Event::MouseWheelScrolled) |
sf::Event::MouseButtonPressed
,sf::Event::MouseButtonReleased
- 滑鼠按鍵
- 資料:
event.mouseButton
button
按鍵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
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)