2012-02-02 122 views
0

我在我的代碼中有某處我已經做了很多次了,但現在我不能!無法獲得精靈位置

for (b2Body* bo = world->GetBodyList(); bo; bo = bo->GetNext()) 
    { 


     CCSprite *tempSprite = (CCSprite *) bo->GetUserData(); 
     NSLog(@"%f",tempSprite.position.x); //crashes in this line. 

我要靠我的世界的屍體,我可以看到我有他們的22,但每一次我嘗試做財產以後:tempSprite.position.x崩潰!

我也可以打印此:

if(tempSprite != NULL) 
      NSLog(@"YES"); 

爲什麼我不能得到這個職位? 我的世界很棒,聯繫人監聽程序正在做的很好;不能理解這一點。

有幫助嗎?

+0

報告的錯誤是什麼? – FBryant87 2012-02-02 19:39:56

+0

EXC_BAD EXCESS你不能知道那是什麼。但我所做的一切都包含tempSprite.position正在工作。 – Curnelious 2012-02-02 20:22:12

+0

你用SetUserData放入了身體用戶數據? – iforce2d 2012-02-02 20:44:36

回答

0

解決,但沒有明確爲什麼

我做

 [badBondSheet1 removeChild:actora cleanup:YES]; 
     [self removeChild:actorb cleanup:YES]; 
     [self shiftEnemies:touchPointA]; // calls the code that i have posted 

時shiftEnemies的是,我已經發布,這對所有的機構運行的功能。

我已經更正爲:

 [self shiftEnemies:touchPointA]; 
    [badBondSheet1 removeChild:actora cleanup:YES]; 
    [self removeChild:actorb cleanup:YES]; 

和它的作品。

那是因爲我跑過我的身體,其中一些沒有用戶數據,因爲我已經清理了精靈!

所以你必須摧毀身體和清理精靈,然後跑過你的身體。 結論:不要清理你的SPRITE,並且在你毀壞你的身體之前做一些事情!

聽起來是否合理?

+1

這聽起來像是在摧毀你放入身體用戶數據的東西,在這種情況下,你應該爲該身體設置SetUserData(NULL),以確保它不會保留無效的引用。 – iforce2d 2012-02-03 07:42:22

+0

@ iforce2d我無法理解。我首先摧毀一個身體,還有它的精靈,然後我跑過我的身體,那身體不再存在,所以它的用戶數據不相關,因爲我甚至不檢查它 - 他已經在我的世界之外了!那麼你的答案是什麼意思? – Curnelious 2012-02-04 10:26:01

+0

好吧!我摧毀身體之後,我調用該功能,所以仍然有一個身體在列表中,但它沒有雪碧userData。非常感謝你在哪裏! – Curnelious 2012-02-04 10:32:16