2D敌人阵列在创建时崩溃

2D arrary of enemies crashes on creation

本文关键字:崩溃 创建 敌人 阵列 2D      更新时间:2023-10-16

大家好,我的Ogre问题有问题。我不确定这是否是问这个问题的最佳地点,但我也可以。以下是我制作的代码示例,用于创建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);

如有任何帮助,我们将不胜感激:)

在这行中,您想对实体和场景节点做什么

    enem->setEnemies(enemyVec);

请记住,您只是在循环的范围内声明了Nodes和Entity,由于您没有制作它们的完整副本并将其粘贴到分配的内存中,因此您的向量可能指的是在其生存期内自动分配的节点,以及无论您要对它们做什么,它的未定义行为。因此,可能有些状态在他们的记忆中仍然是一样的,Ogre可以处理它们,但会出错,因为这并不完全是它应该是的

即使Ogre正在处理这件事,你也应该通知

对于每个

i;j == 3

初始位置是相同的。因此,这可能是指Ogre错误,如果pos与initialPos有任何关系,那么您就有非唯一字符串,其中需要唯一字符串。