SFML - 纹理无法正确更改

  • 本文关键字:纹理 SFML c++ sfml
  • 更新时间 :
  • 英文 :


我正在使用SFML编写程序。我有一个图类和一个节点类。我想做的是当用户点击LMB时改变节点的纹理。我做到了,这很好。但是,如果有另一个节点已经"点击",当用户点击其他节点时,我们应该将第一个节点的纹理更改为"未点击"。我也这么做了。但它并不是100%正确的。当我们点击另一个节点后,第一个节点的纹理不会立即改变,但当我们移动鼠标或再次点击某个地方时,纹理会改变。似乎需要再进行一次for循环来改变纹理,这就是为什么在我们点击另一个节点后,第一个节点的纹理不会立即改变。我试图通过添加另一个for循环或通过将一些代码块切换到另一个地方来修复它,但没有运气。

这是我的整个Graph类的Update()方法

void Graf::Update(RenderWindow &win, GameObject &gm, Event &ev) {
    for (int i=0; i<rozmiar; i++) { //begin loop
        if (gm.KlikniecieMyszka(w[i].getSpr(), win, ev)) { //if there was a mouse click
            for (int j=0; j<rozmiar; j++) { //check if we have a node that already has a "clicked" texture, that is "tagged"
                if (w[j].zaznaczony) { w[j].zaznaczony=false; break; } //and if so, change value of "zaznaczony" (that means "tagged") to false, so we can switch its texture to the appropiate one. and break that for loop, because there can be only one already "tagged" node
            }
            if (!w[i].odwiedzony) w[i].odwiedzony=true; //so, if the node that user just clicked on wasn't yet "visited" ("odwiedzony"), change value of "odwiedzony" ("visited") to true
            w[i].zaznaczony=true; //and set "zaznaczony" ("tagged") to true, so the program knows that this is our currently clicked node
            dzwiek_nn.play(); //and play some sound
        }
            //now, changing textures
        if (w[i].zaznaczony) //tagged node
            w[i].aktualna_tex=ZAZNACZONY; //change its texture to TAGGED
        else { //not currently tagged node
            if (w[i].odwiedzony) //but if it was already visited
                w[i].aktualna_tex=ODWIEDZONY; //change its texture to VISITED
            else
                w[i].aktualna_tex=NIEODWIEDZONY; //change its texture to NOTVISITED
        }
        w[i].Update(win, gm, ev); //and update node. this method just changes the texture of the node (node.setTexture - that's all)
    }
}

我很难理解这个函数的状态。我发现,当我需要编写可能有许多状态的复杂代码时,我会写一个流程图。

现在看起来你的节点可以有三种状态中的任何一种:当前、已访问、未访问。我强烈建议你找张纸把它画出来。此外,我建议保持括号和行间距的使用一致,特别是在寻求帮助的情况下。

最新更新