1

我正在和一些朋友一起开发一个游戏项目。

我们开始使用 Xcode 5 for iOS 7.0 制作它。

游戏从第一次触球开始。我们的角色从天而降,你可以开始和他一起跳跃。

一切正常,直到我的朋友将项目压缩并发送给我。我打开它,并尝试在模拟器上运行。所有的场景都是在我朋友的机器上创建的,但是我点击了。游戏崩溃。

我得到的错误信息是:

断言失败:(面积 > 1.19209290e-7F),函数 ComputeMass,文件 /SourceCache/PhysicsKit_Sim/PhysicsKit-6.5.4/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape.cpp,第 395 行。

所以,我看了看有什么不同,并意识到我在 iOS 7.1 上运行它,将其更改为 7.0,一切又正常了。

但是,现在我有一个无法在 7.1 上玩的游戏。我刚刚开始学习 sprite-kit,所以......我不知道我能做些什么来改变它。

UITouch *t = [touches anyObject];

int forca = [t locationInView:self.view].y;

[self.player pular:abs( ((forca/40) -8)*15 )];

[self.physicsWorld removeAllJoints];
self.jogoAtivo = TRUE;
self.player.personagem.physicsBody.dynamic = YES; //<-Acuses to be the error
[[self floor] setMovingEnable];

在主线程中,[PKPhysicsBody setDynamic:]:

PhysicsKit`-[PKPhysicsBody setDynamic:]:
0x9533e7e:  pushl  %ebp
0x9533e7f:  movl   %esp, %ebp
0x9533e81:  pushl  %esi
0x9533e82:  subl   $0x14, %esp
0x9533e85:  calll  0x9533e8a                 ; -[PKPhysicsBody setDynamic:] + 12
0x9533e8a:  popl   %ecx
0x9533e8b:  movl   0x8(%ebp), %eax
0x9533e8e:  cmpb   $0x0, 0x10(%ebp)
0x9533e92:  je     0x9533ea9                 ; -[PKPhysicsBody setDynamic:] + 43
0x9533e94:  movl   0x4316e(%ecx), %edx
0x9533e9a:  movl   (%eax,%edx), %edx
0x9533e9d:  movl   0x4316a(%ecx), %esi
0x9533ea3:  movl   %edx, 0x10(%esi,%eax)
0x9533ea7:  jmp    0x9533eb7                 ; -[PKPhysicsBody setDynamic:] + 57
0x9533ea9:  movl   0x4316a(%ecx), %edx
0x9533eaf:  movl   $0x0, 0x10(%edx,%eax)
0x9533eb7:  movl   0x43172(%ecx), %edx
0x9533ebd:  movl   (%eax,%edx), %edx
0x9533ec0:  testl  %edx, %edx
0x9533ec2:  je     0x9533eda                 ; -[PKPhysicsBody setDynamic:] + 92
0x9533ec4:  movl   0x4316a(%ecx), %ecx
0x9533eca:  movl   0x10(%ecx,%eax), %eax
0x9533ece:  movl   %eax, 0x4(%esp)
0x9533ed2:  movl   %edx, (%esp)
0x9533ed5:  calll  0x954a2b4                 ; b2Body::SetType(b2BodyType)
0x9533eda:  addl   $0x14, %esp      // Green Line "Thread 1:signal SIGABRT
0x9533edd:  popl   %esi
0x9533ede:  popl   %ebp
0x9533edf:  ret    

编辑:

因此,通过@LearnCocos2D 对该区域的评论,我再次查看了我的代码。

当我初始化我的角色时,我使用:

self.personagem.xScale = -self.personagem.xScale;

水平翻转我的角色精灵。

我把它取下来,我的代码现在可以工作了。

我假设翻转精灵的负数导致与质量计算发生冲突。

我的解决方法:用 Photoshop 翻转并保存另一张图像。

4

1 回答 1

1
(area > 1.19209290e-7F), function ComputeMass

这似乎表明多边形的面积太大。我的猜测是,这是因为一个具有顺时针顶点缠绕的多边形,或者甚至是一个不凸的多边形。

验证所有多边形主体(即使用自定义 CGPath 创建的多边形主体)是否使用适当的形状。形状的点必须是逆时针缠绕的,并且多边形本身必须是凸的。

此外,我相信多边形形状的最大限制为 12 点,但如果你超过了它可能会在其他地方断言。

于 2014-03-20T10:31:32.017 回答