0

私は、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'

4

2 に答える 2

3

構造体の非静的メンバーフィールドに静的にアクセスしようとしています。あなたはそれをすることはできません。次のようなものを試してください。

// 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);
于 2012-11-06T22:33:38.620 に答える
1

あなたが現在していることは、いくつかの点で正しくありません。まず第一に、そのような静的データとしてxとyにアクセスすることはできません。それは、単に存在しません。

その次に、SFMLイベントは本質的に結合です。つまり、実際の内容は、処理しようとするイベントのタイプによって異なります。少なくともイベントオブジェクトからではなく、すべてのイベントのx値とy値を取得することはできません。マウスイベントがある場合は、次のようにします。

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

または、mouseMovedイベントスコープ外でこれを実行する場合は、いつでもMouseクラスを使用できます。これには、とgetPositionを含む2次元ベクトルを返すメソッドが含まれています。xy

sf::Mouse::getPosition(); //Absolute coordinates
sf::Mouse::getPosition(window); //Relative to window
于 2012-11-06T22:38:47.767 に答える