更改字体颜色时发生 SFML 访问冲突
SFML access violation when changing font color
我的程序中的菜单 class 有问题。
当我尝试切换菜单文本颜色时:
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 而不是我自己的 class 来实现它,但没有成功。即使我没有设置字体,我也有同样的问题。
不知何故,当我在键盘上单击一次时它可以工作,但是当我向上单击时它立即停止并且不会切换。
可能不是错误的原因,但如果 selectedItemIndex
是无符号整数,则条件 if (selectedItemIndex -1 >= 0)
可能导致错误,如果 selectedItemIndex
为 0,因为它将导致在被触发的语句中。
因此,selectedItemIndex
将下溢并返回到该类型中可表示的最大可能值。为此,它将尝试访问可能导致错误的越界元素。
尝试将语句更改为 if (selectedItemIndex > 0)
如果这不能解决问题,那么您需要向我们提供更多信息和/或代码。
我的程序中的菜单 class 有问题。 当我尝试切换菜单文本颜色时:
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 而不是我自己的 class 来实现它,但没有成功。即使我没有设置字体,我也有同样的问题。
不知何故,当我在键盘上单击一次时它可以工作,但是当我向上单击时它立即停止并且不会切换。
可能不是错误的原因,但如果 selectedItemIndex
是无符号整数,则条件 if (selectedItemIndex -1 >= 0)
可能导致错误,如果 selectedItemIndex
为 0,因为它将导致在被触发的语句中。
因此,selectedItemIndex
将下溢并返回到该类型中可表示的最大可能值。为此,它将尝试访问可能导致错误的越界元素。
尝试将语句更改为 if (selectedItemIndex > 0)
如果这不能解决问题,那么您需要向我们提供更多信息和/或代码。