For循环中的Switch语句无法检查变量的某些值
Switch Statement within For Loop Failing to Check Variable at Certain Values
正如标题所示,我遇到了switch
语句未能检查for
循环中特定值的i
变量的问题。下面的布尔函数模拟两个精灵之间的定向边界框碰撞,i
变量表示定向边界框的每个面。然而,当函数返回false
时,i
只在0
和1
处被检查,当函数返回true
时,i
只在2
和3
处被检查。
我不知道是否是for
循环或switch
语句导致此错误,我已经仔细检查了碰撞是否适用于定向边界框的所有面,我可以确认它确实工作完美。任何形式的援助将不胜感激!
Collision.cpp:
bool Collision::orientedBoundingBoxTest(const sf::Sprite &object1, const sf::Sprite &object2, int object1Width, int object1Height, int object2Width, int object2Height)
{
/*Variables assigned and declared here*/
for (int i = 0; i < 4; i++)
{
float faceX = collisionObject1.getPoint(i).x - collisionObject1.getPoint((i + 1) % 4).x;
float faceY = collisionObject1.getPoint(i).y - collisionObject1.getPoint((i + 1) % 4).y;
float perpendicularAxisX = -faceY;
float perpendicularAxisY = faceX;
float normalizedAxisLength = sqrt(perpendicularAxisX * perpendicularAxisX + perpendicularAxisY * perpendicularAxisY);
perpendicularAxisX /= normalizedAxisLength;
perpendicularAxisY /= normalizedAxisLength;
float object1Min = std::numeric_limits<float>::max(), object1Max = -object1Min;
float object2Min = std::numeric_limits<float>::max(), object2Max = -object2Min;
for(int j = 0; j < 4; j++)
{
float object1Projection = (perpendicularAxisX * (collisionObject1.getPoint(j % 4).x + collisionObject1.getPosition().x) + perpendicularAxisY * (collisionObject1.getPoint(j % 4).y + collisionObject1.getPosition().y)) / (perpendicularAxisX * perpendicularAxisX + perpendicularAxisY * perpendicularAxisY);
object1Min = min(object1Projection, object1Min);
object1Max = max(object1Projection, object1Max);
}
for(int j = 0; j < 4; j++)
{
float object2Projection = (perpendicularAxisX * (collisionObject2.getPoint(j % 4).x + collisionObject2.getPosition().x) + perpendicularAxisY * (collisionObject2.getPoint(j % 4).y + collisionObject2.getPosition().y)) / (perpendicularAxisX * perpendicularAxisX + perpendicularAxisY * perpendicularAxisY);
object2Min = min(object2Projection, object2Min);
object2Max = max(object2Projection, object2Max);
}
switch (i) //Switch statement failing to check "i" variable at certain values
{
case 0:
deltaY = -(object1Max - object2Min);
break;
case 1:
deltaX = object1Min - object2Max;
break;
case 2:
deltaY = object1Min - object2Max;
break;
case 3:
deltaX = -(object1Max - object2Min);
break;
}
if (! (object1Max >= object2Min && object1Min <= object2Max))
return false;
}
return true;
}
Engine.cpp:
void Engine::physics(sf::RenderWindow& _window)
{
for (int i = 0; i < 5; i++)
{
if (collision.orientedBoundingBoxTest(collisionArray[i].collisionObjectSprite, player.playerSprite, collisionArray[i].width, collisionArray[i].height, player.width, player.height))
{
currentCollisionObjectIndex = i;
player.hitTest = true;
break;
}
else
{
player.hitTest = false;
}
}
/*Additional code here*/
}
在我看来,你的结论是错误的,把cout << i << endl;
放在case
s之间,并确保你的结果。
我确信每个0..3
都会在i
的每次迭代中满足,除非调用return
语句。
switch (i)
{
case 0:
deltaY = -(object1Max - object2Min); cout << i << endl;
break;
case 1:
deltaX = object1Min - object2Max; cout << i << endl;
break;
case 2:
deltaY = object1Min - object2Max; cout << i << endl;
break;
case 3:
deltaX = -(object1Max - object2Min); cout << i << endl;
break;
}
相关文章:
- 试图让变量检查数组中的某些内容
- 如何检查变量是否是C++中的地图?
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 成员变量与函数概念检查
- 为什么我的 c++ 程序检查不是初始化的变量?
- 如何更好地检查两个 char 变量是否在一组值中?
- 如何检查模板类中的变量是否为字符串类型?
- 如何检查 int 变量是否包含合法(非陷阱表示)值?
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 是否有一个库可以检查C++中的变量类型?
- 有没有办法检查发送到变量的值是否是正确的类型,而它已经在该变量下?
- 检查私有成员变量是否在一定范围内,如果没有调整
- 如何使用 ifstream 检查文件中变量的类型?
- C++ 如何检查 char 变量是否未定义(未初始化)
- 是否可以检查变量是否位于 L1/L2/L3 缓存中
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- if() 跳过我的变量检查
- 使用整型变量检查用户输入是整型还是字符串
- Makefile.am /配置.ac条件环境变量检查