SFML - 纹理无法正确更改
SFML - texture doesn't change correctly
我正在使用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)
}
}
我很难理解这个函数的状态。我发现,当我需要编写可能有许多状态的复杂代码时,我会写一个流程图。
现在看起来你的节点可以有三种状态中的任何一种:当前、已访问、未访问。我强烈建议你找张纸把它画出来。此外,我建议保持括号和行间距的使用一致,特别是在寻求帮助的情况下。
相关文章:
- SFML纹理像播放器
- SFML 纹理变换(放大)
- 无法将图像加载到纹理矢量 (SFML)
- SFML 纹理使用问题
- SFML 纹理无法正确加载
- 在 SFML 中不使用动态内存时显示白色纹理代替实际纹理
- 如何将 SFML 纹理用作静态数据成员
- SFML 纹理内存管理
- SFML 纹理持有人已删除,但仍在范围内
- 为什么我的SFML将SF ::纹理作为参数传递到函数时会不断崩溃
- 试图用SFML中的精灵和纹理产生继承
- 最大 SFML 纹理尺寸
- 为什么 SFML 加载的是白色方块而不是纹理
- SFML中的白色方块,角色和纹理存储在不同的对象中
- SFML 纹理显示为白框
- 旋转纹理 sfml 并将输出保存到文件
- 我的sfml纹理在哪里超出了范围
- SFML中的程序纹理
- 如何在SFML或OpenGL中正确地将纹理映射到凸多边形上
- 从外部调用封装类成员函数时不加载SFML纹理