【问题标题】:Get input after a mouse click SFML鼠标点击后获取输入 SFML
【发布时间】:2015-08-14 06:09:11
【问题描述】:

我正在使用 SFML 制作一个表单,但我被困在一个地方,在我点击一个矩形后,我得到了输入。出于测试目的,我使用 cout 打印我输入的内容。这是代码sn-p。 event 是 sf::Event 的对象,rect1 是矩形。在 if 语句中,我指定了我单击的区域。 现在我想在单击矩形后打印出我输入的内容。请帮助解决这个问题,因为我已经超过 6 小时没有破解它。

...

switch (event.type){

   case Event::Closed:
      window.close();
            break;
        case Event::MouseMoved:
            //cout << event.mouseMove.x << ", " << event.mouseMove.y << endl;
            break;
        case Event::MouseButtonReleased:
            if (event.key.code==Mouse::Left
                && Mouse::getPosition(window).x >= rect1.getPosition().x
                && Mouse::getPosition(window).x <= rect1.getPosition().x + rect1.getSize().x
                && Mouse::getPosition(window).y >= rect1.getPosition().y
                && Mouse::getPosition(window).y <= rect1.getPosition().y + rect1.getSize().y) 
            {


                  //what I want to do is here I guess. 


            }
            break;


        }

【问题讨论】:

    标签: c++ sfml


    【解决方案1】:

    我假设你正在制作一个文本框。

    当框被按下时,你应该切换一个布尔值,它显示框是否被选中。然后,在另一个事件中,您应该检查是否输入了任何文本(TextEntered 事件)。如果有,你应该检查文本框是否被选中,如果是,插入字符。

    这是一个例子:

    switch (event.type){
    
        case Event::Closed:
            window.close();
            break;
        case Event::MouseMoved:
            //cout << event.mouseMove.x << ", " << event.mouseMove.y << endl;
            break;
        case Event::MouseButtonReleased:
            if (event.key.code==Mouse::Left
                && Mouse::getPosition(window).x >= rect1.getPosition().x
                && Mouse::getPosition(window).x <= rect1.getPosition().x + rect1.getSize().x
                && Mouse::getPosition(window).y >= rect1.getPosition().y
                && Mouse::getPosition(window).y <= rect1.getPosition().y + rect1.getSize().y) 
            {
                  // The box has been selected
                  // Toggle the boolean
                  isSelected = !isSelected;
            }
            break;
        case Event::TextEntered:
            if ( isSelected )
            {
                if ( event.Text.Unicode < 0x80 ) // it's printable
                {
                    // Here is the character that was typed
                    char keyString = (char) event.Text.Unicode;
                    // Here you should add the character to perhaps a string containing the total text in the text box
                }
            }
    }
    

    这应该可以让您捕获选择文本框时输入的字符。

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 1970-01-01
      • 2013-08-02
      • 2020-11-15
      • 2012-06-13
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多