我的程序菜单类出现问题。
当我尝试切换菜单文本颜色时:

void Menu::moveUp()
{
    if (selectedItemIndex -1 >= 0)
    {
        menuLabel[selectedItemIndex].setColor(false);
        selectedItemIndex--;
        menuLabel[selectedItemIndex].setColor(true);
    }
}

void Menu::moveDown()
{
    if (selectedItemIndex + 1 < NUMBER_OF_MENU_LABELS)
    {
        menuLabel[selectedItemIndex].setColor(false);
        selectedItemIndex++;
        menuLabel[selectedItemIndex].setColor(true);
    }
}

void Menu::update()
{
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
    {
        moveUp();
    }
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
    {
        moveDown();
    }

}


Xan-Man.exe中在0x51D45960(sfml-graphics-d-2.dll)中引发的异常:0xC0000005:访问冲突写入位置0x00000008。

在功能上

void Writing::setColor(bool color)
{
    if (color)
    {
        text.setFillColor(sf::Color(0, 255, 255));
    }
    else
    {
        text.setFillColor(sf::Color(255, 255, 255));
    }
}


我尝试用sf :: Text而不是我自己的类来实现它,但是它没有用。即使我没有设置字体,我也遇到同样的问题。

某种程度上,当我在键盘上单击一次时,它可以工作,但是当我单击时,它立即停止并且不会切换。

最佳答案

可能不是导致错误的原因,但是如果selectedItemIndex是无符号整数,则如果if (selectedItemIndex -1 >= 0)为0,则条件selectedItemIndex可能会导致错误,因为这将导致语句被触发。

因此,selectedItemIndex将下溢并回绕到该类型可表示的最大可能值。为此,它将尝试访问可能导致错误的超出范围的元素。

尝试将语句更改为if (selectedItemIndex > 0)

如果仍不能解决问题,则需要向我们提供更多信息和/或代码。

关于c++ - 更改字体颜色时出现SFML访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49951564/

10-08 21:13