gpt4 book ai didi

c++ - 碰撞检测期间的堆栈溢出错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:43 25 4
gpt4 key购买 nike

我正在使用 sprite 开发一个简单的 DirectX 9 2d 游戏。我已经编写了(并将我从书本和网上找到的一些代码片段拼凑在一起)一个小型引擎,现在开始使用应用程序的碰撞检测元素。我在为碰撞检测创建的​​函数中收到堆栈溢出错误:

UINT Game::IsCollision(int a, int b)
{
if(a != b)
{
if((m_Sprites[a].posrect.bottom >= m_Sprites[b].posrect.top) && (m_Sprites[a].posrect.top <= m_Sprites[b].posrect.bottom) && (m_Sprites[a].posrect.right >= m_Sprites[b].posrect.left) && (m_Sprites[a].posrect.left <= m_Sprites[b].posrect.right))
{
if(m_Sprites[a].posrect.top < m_Sprites[b].posrect.top && m_Sprites[a].posrect.top < m_Sprites[b].posrect.bottom && m_Sprites[a].posrect.bottom < m_Sprites[b].posrect.bottom)
{
return BOTTOM;
}
else if(m_Sprites[b].posrect.top < m_Sprites[a].posrect.top && m_Sprites[a].posrect.top < m_Sprites[b].posrect.bottom && m_Sprites[b].posrect.bottom < m_Sprites[a].posrect.bottom)
{
return TOP;
}
else if( m_Sprites[a].posrect.left < m_Sprites[b].posrect.left && m_Sprites[b].posrect.left < m_Sprites[a].posrect.right && m_Sprites[a].posrect.right < m_Sprites[b].posrect.right)
{
return RIGHT;
}
else if( m_Sprites[b].posrect.left < m_Sprites[a].posrect.left && m_Sprites[a].posrect.left < m_Sprites[b].posrect.right && m_Sprites[b].posrect.right < m_Sprites[a].posrect.right)
{
return LEFT;
}
}
else
{
return NOCOLLISION;
}
}
return NOCOLLISION;
}

另外我是这样调用函数的:

void Game::UpdateSprite(int e)
{
UINT collision;
for(int f = 0; f < MAX_SPRITES; f++)
{
if(m_Sprites[f].occupied && m_Sprites[e].occupied && f != e)
{
collision = IsCollision(f, e);

switch (collision)
{
case BOTTOM:
m_Sprites[e].movey *= -1;
m_Sprites[f].movey *= -1;
break;

case TOP:
m_Sprites[e].movey *= -1;
m_Sprites[f].movey *= -1;
break;

case RIGHT:
m_Sprites[e].movex *= -1;
m_Sprites[f].movex *= -1;
break;

case LEFT:
m_Sprites[e].movex *= -1;
m_Sprites[f].movex *= -1;
break;

case NOCOLLISION:
break;
}
UpdateSprite(e);
UpdateSprite(f);
}
}
}

最佳答案

从 UpdateSprite 的底部移除对 UpdateSprite 的调用。当一个函数在没有递归终止情况的情况下调用自身时,您将得到无限递归和堆栈溢出。

关于c++ - 碰撞检测期间的堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com