SFML - 纹理不会正确更改

时间:2014-03-20 14:49:28

标签: 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)
    }
}

1 个答案:

答案 0 :(得分:0)

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

现在看起来您的节点可以具有以下三种状态中的任何一种:当前,已访问,未访问。我认真地建议你拿一张纸然后画出来。此外,我建议使用支架和线路空间,特别是如果您正在寻求帮助。