【问题标题】:Why does event.mouseWheelScroll.delta always return 0 using SFML?为什么 event.mouseWheelScroll.delta 使用 SFML 总是返回 0?
【发布时间】:2017-11-12 16:26:13
【问题描述】:

我正在测试 SFML 库 mouseWheelScroll.delta 中的功能,但我总是得到 0 的返回值。为什么会这样?

我使用的代码如下,请注意,在程序的前几行代码中,我初始化了变量sf::Event event;

    if (event.type == sf::Event::MouseWheelScrolled) {
    std::cout << "wheel movement: " << event.mouseWheelScroll.delta << std::endl;
}

SFML 库需要窗口还是可以使用控制台? (我只是问,因为我正在创建一个控制台应用程序)

【问题讨论】:

  • 您是否真的为您的sf::Event 实例检索了实际值?您不能只创建一个 sf::Event 对象并使用成员。除非您致电 sf::Window::pollEvent()sf::Window::waitEvent(),否则不会设置它们。
  • @Mario 很好,如果我打印到它打印 0 的值,所以我不这么认为。

标签: c++ sfml scrollwheel


【解决方案1】:

我几乎可以肯定您忘记了 事件循环 中的某些内容。这个sn-p我试过了,效果很好

#include <iostream>
#include <SFML\Graphics.hpp>

int main(){
    sf::RenderWindow v(sf::VideoMode::getDesktopMode(), "SFML");

    while (v.isOpen()){
        sf::Event event;
        while (v.pollEvent(event)){
            if (event.type == sf::Event::Closed)
                v.close();
            else if (event.type == sf::Event::MouseWheelScrolled){
                std::cout << "Wheel: " << event.mouseWheelScroll.delta << std::endl;
            }
        }
        v.clear();
        v.display();
    }
    return 0;
}

请尝试一下并比较您做错了什么(然后与我们分享)

回答你的第二个问题,我已经创建了一个渲染窗口,但我认为你的问题更多是关于项目是否可以是控制台应用程序,事实上,就是这样,如果你尝试它,它会同时显示控制台和窗口。

【讨论】:

    【解决方案2】:

    谢谢大家的帮助,原来是sf::RenderWindow v(sf::VideoMode::getDesktopMode(), "SFML");这行有问题,是因为没有安装VC++插件,所以一直提示“找不到"winmm.lib"" 错误。

    其他人提供的这两个代码示例都可以工作,只是我......对不起,但非常感谢!

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2016-09-16
      • 2020-05-25
      • 2013-02-26
      • 2013-06-25
      • 1970-01-01
      • 2013-02-14
      • 2011-12-13
      相关资源
      最近更新 更多