我正在使用for循环来迭代我创建的一些数组,这些数组代表了鼠标可以悬停的区域。然后,当循环确认鼠标位于某个区域时,它会将迭代变量保存到稍后在主函数中使用的公共变量,以突出显示鼠标所在的区域。问题是for循环没有为第一次迭代提供正确的值。
{
//mouse offsets
int x = 0, y = 0;
//if mouse moves
if (event.type == SDL_MOUSEMOTION)
{
//get the mouse co-ords
x = event.motion.x;
y = event.motion.y;
for (int grid = 0; grid <= sizeof(grid_region); grid++)
{
if ((x > grid_region[grid].x) && (x < grid_region[grid].x + GRID_WIDTH) && (y > grid_region[grid].y) && (y < grid_region[grid].y + GRID_HEIGHT))
{
//set highlight region
highlight = grid;
}
}
}
}
grid_region是通过“int grid_region [9];”生成的。而奇怪的是,当我后来做一个打印语句,看看什么“突出显示”是什么,当它在grid_region [0]中打印72.如何迭代变量在循环中的任何点变为72?这里有什么帮助?我后来使用突出显示在grid_region中应用精灵,并且它被错误地应用,所以这是一个问题。
答案 0 :(得分:2)
sizeof(grid_region)
的大小是char
的倍数,而不是元素的数量。
也就是说,它是sizeof(int) * 9
,而不是九,显然你的int
是8 char
宽,因为你的结果是72。
你可以循环到< sizeof(grid_region) / sizeof(grid_region[0])
,或者更好地进入21世纪并使用std::vector
或std::array
如果你的编译器足够时髦。