C++ box2d:在ResetMassData上获取信号,b2Assert(m_I>;0.0f)-重心惯性,重心

C++ box2d:在ResetMassData上获取信号,b2Assert(m_I>;0.0f)-重心惯性,重心,c++,ios,objective-c,cocos2d-iphone,box2d,C++,Ios,Objective C,Cocos2d Iphone,Box2d,我试图制作一个桶体,当另一个特定的桶体接触到篮子的内侧地板时,它会做出反应,例如,一个苹果 我现在遇到的问题是,在将篮子分成3个形状后,它现在在主体结构上崩溃了:断言失败:(m_I>0.0f),函数ResetMassData,file/Users/damianwilliams/Documents/XCode Projects/将替换旧的/Kitty Katch/Kitty Katch/libs/Box2D/Dynamics/b2Body.cpp,第319行。 但是如果我把物体声明为静态物体,这就

我试图制作一个桶体,当另一个特定的桶体接触到篮子的内侧地板时,它会做出反应,例如,一个苹果

我现在遇到的问题是,在将篮子分成3个形状后,它现在在主体结构上崩溃了:
断言失败:(m_I>0.0f),函数ResetMassData,file/Users/damianwilliams/Documents/XCode Projects/将替换旧的/Kitty Katch/Kitty Katch/libs/Box2D/Dynamics/b2Body.cpp,第319行。

但是如果我把物体声明为静态物体,这就不会发生

如果我只有一个(任意一个)侧面和底部要添加到身体中,也不会发生这种情况

下面是构建它的所有代码,我猜这是一个简单的修复,但我看不到:(

这就是崩溃发生在
b2Body.cpp
文件中的地方

if (m_I > 0.0f && (m_flags & e_fixedRotationFlag) == 0)
{
    // Center the inertia about the center of mass.
    m_I -= m_mass * b2Dot(localCenter, localCenter);
    b2Assert(m_I > 0.0f);
    m_invI = 1.0f / m_I;
}

回溯

* thread #1: tid = 0x2ba286, 0x02ae8952 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x02ae8952 libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x02aac167 libsystem_pthread.dylib`pthread_kill + 101
frame #2: 0x0281b9c9 libsystem_sim_c.dylib`abort + 127
frame #3: 0x027e653b libsystem_sim_c.dylib`__assert_rtn + 284
* frame #4: 0x001020d8 Kitty Katch`b2Body::ResetMassData(this=0x0f2cd1e0) + 744 at b2Body.cpp:319
frame #5: 0x00101d30 Kitty Katch`b2Body::SetType(this=0x0f2cd1e0, type=b2_dynamicBody) + 208 at b2Body.cpp:128
frame #6: 0x000b8cdc Kitty Katch`-[HelloWorldLayer startGame](self=0x0b7958c0, _cmd=0x0a910d1f) + 60 at HelloWorldLayer.mm:340
frame #7: 0x000ba41d Kitty Katch`-[HelloWorldLayer startGameStub:](self=0x0b7958c0, _cmd=0x0013862f, sender=0x0c782e70) + 77 at HelloWorldLayer.mm:471
frame #8: 0x0240e82b libobjc.A.dylib`-[NSObject performSelector:withObject:] + 70
frame #9: 0x0006d367 Kitty Katch`__49-[CCMenuItemLabel initWithLabel:target:selector:]_block_invoke(.block_descriptor=<unavailable>, sender=0x0c782e70) + 71 at CCMenuItem.m:193
frame #10: 0x0006cc5c Kitty Katch`-[CCMenuItem activate](self=0x0c782e70, _cmd=0x00c32eb8) + 108 at CCMenuItem.m:135
frame #11: 0x0006d890 Kitty Katch`-[CCMenuItemLabel activate](self=0x0c782e70, _cmd=0x00c32eb8) + 160 at CCMenuItem.m:246
frame #12: 0x001187e9 Kitty Katch`-[CCMenu ccTouchEnded:withEvent:](self=0x0c7844f0, _cmd=0x0012f7fa, touch=0x0b791aa0, event=0x0b685d60) + 297 at CCMenu.m:228
frame #13: 0x0240e880 libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 77
frame #14: 0x001261ae Kitty Katch`-[CCTouchDispatcher touches:withEvent:withTouchType:](self=0x0c39e2e0, _cmd=0x0013b5e2, touches=0x0c3b9130, event=0x0b685d60, idx=2) + 1534 at CCTouchDispatcher.m:292
frame #15: 0x00126d83 Kitty Katch`-[CCTouchDispatcher touchesEnded:withEvent:](self=0x0c39e2e0, _cmd=0x00c0e017, touches=0x0c3b9130, event=0x0b685d60) + 115 at CCTouchDispatcher.m:366
frame #16: 0x000b44be Kitty Katch`-[CCGLView touchesEnded:withEvent:](self=0x0c397440, _cmd=0x00c0e017, touches=0x0c3b9130, event=0x0b685d60) + 110 at CCGLView.m:349
frame #17: 0x0047dddd UIKit`-[UIWindow _sendTouchesForEvent:] + 852
frame #18: 0x0047e9d1 UIKit`-[UIWindow sendEvent:] + 1117
frame #19: 0x004505f2 UIKit`-[UIApplication sendEvent:] + 242
frame #20: 0x0043a353 UIKit`_UIApplicationHandleEventQueue + 11455
frame #21: 0x0344e77f CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
frame #22: 0x0344e10b CoreFoundation`__CFRunLoopDoSources0 + 235
frame #23: 0x0346b1ae CoreFoundation`__CFRunLoopRun + 910
frame #24: 0x0346a9d3 CoreFoundation`CFRunLoopRunSpecific + 467
frame #25: 0x0346a7eb CoreFoundation`CFRunLoopRunInMode + 123
frame #26: 0x032375ee GraphicsServices`GSEventRunModal + 192
frame #27: 0x0323742b GraphicsServices`GSEventRun + 104
frame #28: 0x0043cf9b UIKit`UIApplicationMain + 1225
frame #29: 0x00126f06 Kitty Katch`main(argc=1, argv=0xbfffed54) + 134 at main.m:14
frame #30: 0x00002e85 Kitty Katch`start + 53
我不知道我在寻找什么,也不知道为什么会出现错误。除了上面引用的错误,调试窗口中没有什么有趣的东西。我希望有人能把我的代码放在上面,看到问题所在,然后提供有关如何诊断问题并最终帮助我解决问题的说明

这不是一个原始的“崩溃”,而是一个断言失败

断言失败了,让我们看看它


在运行时,
m_I>0.0f
false
,所以
m_I 0.0f
如果为true(这是
if
的一个条件),我们推断
m_mass*b2Dot(localCenter,localCenter)我认为这是由多边形自交造成的


iirc当多边形顺时针缠绕或面积为零(由于所有点都是共线)时,也可以点击此断言。当这些都是正确的,但多边形太小时,还有另一个类似的断言可能会出现。

调试窗口非常空…它有标准的东西,我的问题中引用了一个…不确定我在找什么或为什么会出错。我希望有人能接受我上面的代码,查看问题所在,然后提供有关如何诊断问题并最终解决问题的说明。调试窗口和控制台窗口实际上不是一回事:调试器可以在断言失败之前为您提供变量值(查看回溯)是的,我相信我看到的是调试窗口,以及变量窗口?显示“所有输出”…显示(lldb)?我可以在哪里输入bt进行回溯?-稍后将添加回溯到问题中…如果这不对,请告诉我如何获得它?谢谢…如果这是正确的,请向您致敬,先生!!因为在测试时,我发现一些物体从多边形中掉落。这张屏幕截图是什么软件的,谢谢…!我不确定这是我的t、 但我真的希望是这样的……我从头开始完全重新定义了点,使腰部点远离任何活动。但这没有帮助……可能是物体太小了吗?这些点也是顺时针缠绕的。移除最后一点(因为它几乎位于第一点之上,并且有点多余)然后颠倒顺序。这就是解决方案!-首先,我了解到最后一行是由box自动插入的…你对我的最后一个点多余的评论就是其中的提示。但有一件事我一直坚持…为什么颠倒点会有阻止它的效果?Box2D中多边形的点应该在计数器clockwi中给出按顺序排列并形成一个不超过8个顶点的凸、非自交多边形。当点顺时针缠绕时,面积计算将变为负值。我不想再次将您指向外部站点,但Box2D手册列出了所有细节,非常值得一读:)该软件是RUBE Box2D editor。
* thread #1: tid = 0x2ba286, 0x02ae8952 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x02ae8952 libsystem_kernel.dylib`__pthread_kill + 10
frame #1: 0x02aac167 libsystem_pthread.dylib`pthread_kill + 101
frame #2: 0x0281b9c9 libsystem_sim_c.dylib`abort + 127
frame #3: 0x027e653b libsystem_sim_c.dylib`__assert_rtn + 284
* frame #4: 0x001020d8 Kitty Katch`b2Body::ResetMassData(this=0x0f2cd1e0) + 744 at b2Body.cpp:319
frame #5: 0x00101d30 Kitty Katch`b2Body::SetType(this=0x0f2cd1e0, type=b2_dynamicBody) + 208 at b2Body.cpp:128
frame #6: 0x000b8cdc Kitty Katch`-[HelloWorldLayer startGame](self=0x0b7958c0, _cmd=0x0a910d1f) + 60 at HelloWorldLayer.mm:340
frame #7: 0x000ba41d Kitty Katch`-[HelloWorldLayer startGameStub:](self=0x0b7958c0, _cmd=0x0013862f, sender=0x0c782e70) + 77 at HelloWorldLayer.mm:471
frame #8: 0x0240e82b libobjc.A.dylib`-[NSObject performSelector:withObject:] + 70
frame #9: 0x0006d367 Kitty Katch`__49-[CCMenuItemLabel initWithLabel:target:selector:]_block_invoke(.block_descriptor=<unavailable>, sender=0x0c782e70) + 71 at CCMenuItem.m:193
frame #10: 0x0006cc5c Kitty Katch`-[CCMenuItem activate](self=0x0c782e70, _cmd=0x00c32eb8) + 108 at CCMenuItem.m:135
frame #11: 0x0006d890 Kitty Katch`-[CCMenuItemLabel activate](self=0x0c782e70, _cmd=0x00c32eb8) + 160 at CCMenuItem.m:246
frame #12: 0x001187e9 Kitty Katch`-[CCMenu ccTouchEnded:withEvent:](self=0x0c7844f0, _cmd=0x0012f7fa, touch=0x0b791aa0, event=0x0b685d60) + 297 at CCMenu.m:228
frame #13: 0x0240e880 libobjc.A.dylib`-[NSObject performSelector:withObject:withObject:] + 77
frame #14: 0x001261ae Kitty Katch`-[CCTouchDispatcher touches:withEvent:withTouchType:](self=0x0c39e2e0, _cmd=0x0013b5e2, touches=0x0c3b9130, event=0x0b685d60, idx=2) + 1534 at CCTouchDispatcher.m:292
frame #15: 0x00126d83 Kitty Katch`-[CCTouchDispatcher touchesEnded:withEvent:](self=0x0c39e2e0, _cmd=0x00c0e017, touches=0x0c3b9130, event=0x0b685d60) + 115 at CCTouchDispatcher.m:366
frame #16: 0x000b44be Kitty Katch`-[CCGLView touchesEnded:withEvent:](self=0x0c397440, _cmd=0x00c0e017, touches=0x0c3b9130, event=0x0b685d60) + 110 at CCGLView.m:349
frame #17: 0x0047dddd UIKit`-[UIWindow _sendTouchesForEvent:] + 852
frame #18: 0x0047e9d1 UIKit`-[UIWindow sendEvent:] + 1117
frame #19: 0x004505f2 UIKit`-[UIApplication sendEvent:] + 242
frame #20: 0x0043a353 UIKit`_UIApplicationHandleEventQueue + 11455
frame #21: 0x0344e77f CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
frame #22: 0x0344e10b CoreFoundation`__CFRunLoopDoSources0 + 235
frame #23: 0x0346b1ae CoreFoundation`__CFRunLoopRun + 910
frame #24: 0x0346a9d3 CoreFoundation`CFRunLoopRunSpecific + 467
frame #25: 0x0346a7eb CoreFoundation`CFRunLoopRunInMode + 123
frame #26: 0x032375ee GraphicsServices`GSEventRunModal + 192
frame #27: 0x0323742b GraphicsServices`GSEventRun + 104
frame #28: 0x0043cf9b UIKit`UIApplicationMain + 1225
frame #29: 0x00126f06 Kitty Katch`main(argc=1, argv=0xbfffed54) + 134 at main.m:14
frame #30: 0x00002e85 Kitty Katch`start + 53
int scalledPTMRatio = PTM_RATIO ; //scalled...
int numLeftVerts = 6;
b2Vec2 leftVerts[] = {
    b2Vec2(-18.2f / scalledPTMRatio, -17.1f / scalledPTMRatio),
    b2Vec2(-20.6f / scalledPTMRatio, -31.0f / scalledPTMRatio),
    b2Vec2(-29.0f / scalledPTMRatio, -27.7f / scalledPTMRatio),
    b2Vec2(-38.6f / scalledPTMRatio, 20.3f / scalledPTMRatio),
    b2Vec2(-24.3f / scalledPTMRatio, 16.1f / scalledPTMRatio),
    b2Vec2(-21.2f / scalledPTMRatio, -13.2f / scalledPTMRatio)
};

b2PolygonShape basketLeftShape;
basketLeftShape.Set(leftVerts, numLeftVerts);

int numRightVerts = 6;
b2Vec2 rightVerts[] = {
    b2Vec2(14.6f / scalledPTMRatio, -13.0f / scalledPTMRatio),
    b2Vec2(11.6f / scalledPTMRatio, -32.9f / scalledPTMRatio),
    b2Vec2(21.8f / scalledPTMRatio, -31.3f / scalledPTMRatio),
    b2Vec2(39.2f / scalledPTMRatio, 17.1f / scalledPTMRatio),
    b2Vec2(20.4f / scalledPTMRatio, 14.4f / scalledPTMRatio),
    b2Vec2(17.7f / scalledPTMRatio, -10.5f / scalledPTMRatio)
};