Cocos2d iphone cocos2d box2d精灵位置崩溃
我有以下代码:Cocos2d iphone cocos2d box2d精灵位置崩溃,cocos2d-iphone,Cocos2d Iphone,我有以下代码: for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) { if (b->GetUserData() != NULL) { CCSprite *itemSprite = (CCSprite*)b->GetUserData(); CGSize SpriteSize; SpriteSize.height
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL)
{
CCSprite *itemSprite = (CCSprite*)b->GetUserData();
CGSize SpriteSize;
SpriteSize.height = itemSprite.contentSize.height;
SpriteSize.width = itemSprite.contentSize.width;
CGPoint SpritePosition=[itemSprite position];
}
}
只需获取sprite的位置,但此程序有时会在以下情况下崩溃:
SpriteSize.height = itemSprite.contentSize.height;
这一行:
CGPoint SpritePosition=[itemSprite position];
我正在使用cocos2d.99.5
编辑:
这是我的崩溃日志:
异常类型:EXC\U坏访问(SIGBUS)
异常代码:在0x0000000f时内核保护失败
崩溃线程:0
由于您没有发布崩溃转储或堆栈跟踪,我只能猜测。至少有两个原因:
body->SetUserData()
。当您将用户数据强制转换为CCSprite,而实际上它不是CCSprite时,就会发生崩溃。尽管我怀疑这种情况,因为人们通常会将同一类的对象分配给它希望这有帮助。如果没有,请发布更多详细信息(崩溃转储或堆栈跟踪)。好吧,我们可以肯定的是,精灵被分配给了userData,后来被解除分配。我看到您指定的精灵是一个自动释放的对象,更可能意味着超出范围的精灵收到了释放消息。为了确保这是真的,请尝试按如下方式创建sprite:
[[CCSprite alloc]initWithSprite:@“apple.png”]代码>但请记住,以后必须释放它。
如果它对你有效,使用上面的建议 崩溃转储应该为您提供有关错误确切原因的一些有价值的信息。你能把它贴出来吗?我想,那具尸体上没有任何精灵。将通过body列表的迭代更改为如下内容是一个很好的做法:for(b2Body*body=world->GetBodyList();body!=nil;body=body->GetNext()){BodyNode*BodyNode=(BodyNode*)body->GetUserData();if(BodyNode!=NULL&&BodyNode.sprite!=nil){ .... }@gixdev:你的回答可能会有帮助……你能在这个问题的回答部分给出详细信息吗……我正在使用精灵……那么应该用什么来代替BodyNode呢?你能给出代码吗……我用两种方式声明精灵,并且这个精灵被分配给userdata……我需要这两种声明……monkey=[CCSprite SpriteWithPriteFrameName:@“BackMonkey_animation01_pad.png”];和fruits=[CCSprite spriteWithFile:[NSString stringWithFormat:@“Fruit%d_pad.png”;(arc4random()%(2-1+1)+1)];但它并没有按其应有的方式运行?好的,只是为了确保问题的原因是在释放对象时-尝试启动[[CCSprite alloc]InitWithPriteFrameName:frameName]
Thread 0 Crashed:
0 libobjc.A.dylib 0x00002666 objc_msgSend_stret + 14
1 ShootTheMonkey 0x0004c066 -[LevelFour ccTouchBegan:withEvent:] (LevelFour.mm:1432)
2 ShootTheMonkey 0x00321bf0 -[CCTouchDispatcher touches:withEvent:withTouchType:] (CCTouchDispatcher.m:238)
3 ShootTheMonkey 0x00322454 -[CCTouchDispatcher touchesBegan:withEvent:] (CCTouchDispatcher.m:305)
4 ShootTheMonkey 0x003240ec -[EAGLView touchesBegan:withEvent:] (EAGLView.m:318)
5 UIKit 0x00053d72 -[UIWindow _sendTouchesForEvent:] + 254
6 UIKit 0x000536fe -[UIWindow sendEvent:] + 74
7 UIKit 0x0004f320 -[UIApplication sendEvent:] + 260
8 UIKit 0x0004ec8c _UIApplicationHandleEvent + 4772
9 GraphicsServices 0x00003b2c PurpleEventCallback + 660
10 CoreFoundation 0x00022d96 CFRunLoopRunSpecific + 2214
11 CoreFoundation 0x000224da CFRunLoopRunInMode + 42
12 GraphicsServices 0x000030d4 GSEventRunModal + 108
13 GraphicsServices 0x00003180 GSEventRun + 56
14 UIKit 0x0000342a -[UIApplication _run] + 374
15 UIKit 0x00001954 UIApplicationMain + 636
16 ShootTheMonkey 0x0000377e main (main.m:13)
17 ShootTheMonkey 0x0000373c start + 32