【问题标题】:Sending mouse position in SFML event在 SFML 事件中发送鼠标位置
【发布时间】:2012-11-06 22:19:50
【问题描述】:

我一直在制定正确的语法来将 mouseX 和 mouseY 位置传递给我的班级。

我的尝试是这样的:

 // Start the game loop
 while (window.isOpen())
 {
     // Process events
     sf::Event event;
     while (window.pollEvent(event))
     {
         // Close window : exit
         if (event.type == sf::Event::Closed) {
             window.close();
         }
     }

     // Clear screen
     window.clear();

     // Draw the sprite
     window.draw(sprite);
     window.draw(lsprite);

     if(btn_quit.IsIn(sf::Event::MouseMoveEvent::x,sf::Event::MouseMoveEvent::y){
         btn_quit.RenderImg(window,"button_on.png");
     } else {
         btn_quit.RenderImg(window,"button.png");
     }
  ///rest of the code not relevant to this issue

这是在我的课上:

bool IsIn( int mouseX, int mouseY )
{
    if (((mouseX > m_x) && (mouseX < m_x + m_w)) 
    && ((mouseY > m_y) && (mouseY < m_y + m_h ) ) ) {
        return true;
    } else {
        return false;
    }
}

我不断收到输入 x 和 y 的错误,但它是这样说的:

error C2597: illegal reference to non-static member 'sf::Event::MouseMoveEvent::x'

error C2597: illegal reference to non-static member 'sf::Event::MouseMoveEvent::y'

【问题讨论】:

  • 嗯...就像错误消息所说的那样。您正在尝试访问 x 和 y 成员,就好像它们是静态的一样,但它们显然不是。
  • 看起来你应该打电话给btn_quit.IsIn(event.x, event.y)

标签: c++ sfml


【解决方案1】:

您正在尝试静态访问结构的非静态成员字段。你不能那样做。试试这样的:

// Start the game loop
while (window.isOpen())
{
    // Process events
    sf::Event event;
    while (window.pollEvent(event))
    {
        // Close window : exit
        if (event.type == sf::Event::Closed) {
            window.close();
        }
        else if (event.type == sf::Event::MouseMove)
        {
            if(btn_quit.IsIn(event.MouseMoveEvent.x, event.MouseMoveEvent.x){
                btn_quit.RenderImg(window,"button_on.png");
            } else {
                btn_quit.RenderImg(window,"button.png");
            }
        }
    }

    // Clear screen
    window.clear();

    // Draw the sprite
    window.draw(sprite);
    window.draw(lsprite);

【讨论】:

    【解决方案2】:

    您当前的操作在某些方面是不正确的。首先你不能像那样访问 x 和 y 作为静态数据,它根本不存在。

    除此之外,SFML 事件本质上是联合,这意味着它们的实际内容将取决于您尝试处理的事件类型。您不能为每个事件获取 x 和 y 值,至少不能从事件对象中获取。如果你有一个鼠标事件,你会做这样的事情:

    if(event.type == sf::Event::MouseMoved) 
    {
        // do something with event.mouseMove.x and event.mouseMove.y
    }
    

    或者,如果您想在mouseMoved 事件范围之外执行此操作,您始终可以使用Mouse 类。这包含一个getPosition 方法,该方法将返回一个包含xy 的二维向量:

    sf::Mouse::getPosition(); //Absolute coordinates
    sf::Mouse::getPosition(window); //Relative to window
    

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      相关资源
      最近更新 更多