簡體   English   中英

如何在 SFML 2.5.1 中注冊鼠標點擊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM