[英]How to register a mouse click in SFML 2.5.1
所以,我的游戲循環中有這段代碼,它執行每一幀:
if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == true) {
switch (j) {...}
}
使用此代碼的設置方式,只要按住鼠標左鍵,條件內的開關盒將最終執行每一幀,這給我帶來了一些問題......
相反,我想要的是在單擊后執行 switch case,這意味着在按下鼠標按鈕然后釋放之后, sf::Mouse::isButtonPressed
似乎非常適合這項工作,如果不是因為它不再是出於某種奇怪的原因,在當前版本的 SFML (2.5.1) 中不再存在這種情況。 (這就是為什么在刪除此 function 之前對該問題的任何可能重復不再可行的原因)
所以我嘗試的是這樣的:
if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == true) {
if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left) == false) {
switch (j) {...}
}
}
認為程序將首先檢查按鈕是否被按下,然后不再按下,並且僅在兩個條件分別滿足時才執行switch case,但這不起作用,現在switch case完全停止執行。
那么,在按下按鈕然后釋放之后,如何讓程序在每次單擊鼠標時執行指令?
如果這不會對您的代碼造成太大傷害,請在輪詢事件的地方使用sf::Event::MouseButtonReleased
。 這樣您的鼠標事件代碼將只運行一次。
另一種解決方案可能是禁用 window 的鍵重復,類似於window.setKeyRepeatEnabled(false)
。 我不是 100% 確定你會如何處理這個問題。
第三種解決方案是使用 boolean 來跟蹤您的鼠標按鈕 state。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.