【问题标题】:c++ sfml apply only when button pressedc ++ sfml仅在按下按钮时适用
【发布时间】:2018-09-26 17:36:14
【问题描述】:

我有一个问题,当我释放 LShift 按钮时我的角色仍然在运行

释放按钮后如何重置速度?

其实我有这个:

int speed(4);
int speedSprinte(20);

if(sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
{
    keyCount++;
    speed=speedSprinte;
    std::cout<<speed<<std::endl;
} 

我可以添加,但我认为这样做更容易:

if(!sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
{
    keyCount++;
    speed=4;
    std::cout<<speed<<std::endl;
}

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

    要么使用 SFML 事件并监听 sf::Events::KeyReleased (https://www.sfml-dev.org/tutorials/2.5/window-events.php),要么通过存储最后一个状态手动完成。

    int speed(4);
    int speedSprinte(20);
    bool pressedLastTime{false};
    
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
    {
        keyCount++;
        speed=speedSprinte;
        std::cout<<speed<<std::endl;
        pressedLastTime = true;
    } 
    else
    {
        if (pressedLastTime)
        {
            speed = 4;
            pressedLastTime = false;
        }
    }
    

    【讨论】:

    • 好的,谢谢,但我不确定我是否理解speed=0; 如何使speed=4; if(pressedLastTime) 中的speed=0; 除非?
    • 对不起,我认为您问题的第二部分是后来添加的……修正了我的答案。如果您不需要单次重置speed,也可以跳过pressedLastTime
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多