Cocos2d iphone 无法获得精灵位置

Cocos2d iphone 无法获得精灵位置,cocos2d-iphone,box2d,Cocos2d Iphone,Box2d,我的代码中有一些我已经做了很多次的东西,但现在我不能 for (b2Body* bo = world->GetBodyList(); bo; bo = bo->GetNext()) { CCSprite *tempSprite = (CCSprite *) bo->GetUserData(); NSLog(@"%f",tempSprite.position.x); //crashes in this line. 我数着我的世界上的尸体

我的代码中有一些我已经做了很多次的东西,但现在我不能

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


      CCSprite *tempSprite = (CCSprite *) bo->GetUserData();
        NSLog(@"%f",tempSprite.position.x); //crashes in this line.
我数着我的世界上的尸体,我可以看到我有22具尸体,但每次我试图做一些事情:tempsrite.position.x它崩溃了

我还可以打印以下内容:

 if(tempSprite != NULL)
            NSLog(@"YES");
为什么我不能得到这个职位? 我的世界运转得很好;接触式听众做得很好;我不明白


有什么帮助吗?

已解决,但不清楚原因

是的

when shiftEnemies是我发布的在所有身体上运行的函数

我已更正为:

       [self shiftEnemies:touchPointA];
    [badBondSheet1 removeChild:actora cleanup:YES];
    [self removeChild:actorb cleanup:YES];
它是有效的

那是因为我跑过我的身体,其中一些没有用户数据,因为我已经清理了精灵

所以你必须摧毁你的身体,清理精灵,然后碾过你的身体。 结论:不要清洗你的雪碧,在你毁掉你的身体之前做些别的事情


听起来很合理吗?

你永远不可能知道那是什么。但是我所做的所有包含tempsrite.position的事情都在起作用。你用SetUserData在body用户数据中放了什么;像往常一样。。我怎么能调试它呢?嗯。。。“spriteName”是什么类型的变量?听起来像是在破坏放入主体用户数据中的内容,在这种情况下,应该为该主体设置UserDataNull,以确保它没有保留无效引用。@iforce2d我无法理解。我先摧毁一个身体,还有它的精灵,然后我在我的身体上奔跑,那个身体已经不存在了,所以它的用户数据不相关,因为我甚至没有检查它——他已经在我的世界之外了!你的回答是什么意思?好的,明白了!我在调用该函数后销毁了body,因此列表中仍然有一个body,但它没有sprite userData。非常感谢你,对了!
       [self shiftEnemies:touchPointA];
    [badBondSheet1 removeChild:actora cleanup:YES];
    [self removeChild:actorb cleanup:YES];