嗨,大家好我的食人魔问题。我不确定这是否是最好的问题,但我也可以。 以下是为了创建2D敌人阵列而制作的代码示例(适用于太空入侵者游戏
for(int i = 0; i < 5; i++) //Manages the YPOS coordinate of the enemy
{
for(int j = 0; j < 5; j++) //Manages the YPOS coordinate of the enemy
{
stringstream ss;
ss << j;
std::string pos = ss.str();
ss.clear();
ss << i;
pos += "," + ss.str();
std::string enemyName = "Enemy " + pos;
Ogre::Entity * enemyEnt = mSceneMgr->createEntity(enemyName, "razor.mesh");
Ogre::SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode (enemyName+"ParentNode");
Ogre::SceneNode *node2 = node1->createChildSceneNode(enemyName+"Node");
enemyEnt->setMaterialName("Examples/Chrome");
mSceneMgr->getSceneNode(enemyName+"Node")->attachObject(ent);
int multiplier = 100;
if(j < 3)
{
multiplier *= -1;
}
if(j == 3)
{
multiplier = 0;
}
Vector3 initialPos;
initialPos.x = (j+1) * multiplier;
initialPos.y = 0;
initialPos.z = 3000 - ((i+1) * multiplier);
enemyVec.push_back(new Enemy(mSceneMgr,node2, initialPos, j, i, 200 ));
}
}
enem->setEnemies(enemyVec);
}
以下是我遇到的错误
C00146012项目中0x59a6ad4e(msvcp100d.dll)的未处理异常 - 3D Space Invaders.exe:0xC0000005:访问冲突读取位置0xcccccd24。
调试时将它带到xutility中的这段代码
#if _ITERATOR_DEBUG_LEVEL == 2
if (_Myproxy != 0)
{ // proxy allocated, drain it
_Lockit _Lock(_LOCK_DEBUG);
for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter; *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
(*_Pnext)->_Myproxy = 0;
_Myproxy->_Myfirstiter = 0;
}
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */
但是我知道错误在行:
enem->setEnemies(enemyVec);
非常感谢任何和所有帮助:)
答案 0 :(得分:0)
你想对Entitys和Scene节点做什么,在这一行
enem->setEnemies(enemyVec);
请记住,您只是在循环范围内声明了节点和实体,并且由于您没有制作它们的完整副本并将其粘贴到已分配的内存中,因此您的向量可能正在引用自动分配的节点。生命以及你将要做的任何事情,它的未定义行为。所以可能一些状态在他们的记忆中仍然是相同的,并且Ogre可以与它们一起工作,但是会得到错误,因为它不完全是它应该是的。
即使Ogre正在处理此问题,您也应该通知
每个
i;j == 3
初始位置是一样的。所以它可能是指Ogre错误,如果pos与initialPos有关,那么你有非唯一的字符串,其中需要唯一的字符串。