2013-08-22 22 views
0

嗨,大家好我在我的Ogre問題上遇到問題。我不確定這是否是問這個問題的最佳地點,但我也可以。 這裏是我爲了創造敵人的二維數組(一個太空侵略者遊戲二維的敵人在創作時崩潰

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); 
} 

下使代碼的樣本是有錯誤我得到

在0x59a6ad4e

未處理的異常( msvcp100d.dll)在C00146012項目 - 三維空間Invaders.exe:0000005:訪問衝突讀取位置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

你能告訴我們哪一行是128行嗎? – Floris

+0

(讓我們假設)我在瀏覽器中關閉了圖像。我怎麼知道錯誤信息? – 2013-08-22 14:54:12

+2

它與你的問題沒有關係,但是你的串流操作可以用2行而不是7來完成。而且我看不到'ent'聲明在哪裏。那應該是說'enemyEnt'? –

回答

0

你想要做的與該實體和場景節點,在這一行什麼都

enem->setEnemies(enemyVec); 

記住,你聲明的節點和實體正義的循環範圍,和你沒有使他們的完整副本,並將其粘貼到分配的內存,您的載體可能是指的自動所有在他們的一生中以及無論你將如何處理它們,它的未定義的行爲。所以可能有些國家在他們的記憶中仍然是一樣的,Ogre可以和他們一起工作,但是會得到錯誤,因爲它不完全符合它的要求。

即使食人魔正在處理,你應該通知

每個

i;j == 3 

初始位置是一樣的。所以它可能與引用Ogre錯誤有關,如果pos與initialPos有任何關係,那麼您將擁有非唯一的字符串,其中需要唯一的字符串。