ios - 将 iOS 更新到 7.1 后,Sprite-kit 游戏崩溃

标签 ios objective-c sprite-kit skphysicsbody

我正在和一些 friend 开发一个游戏项目。

我们开始使用适用于 iOS 7.0 的 Xcode 5 来制作它。

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

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

我得到的错误信息是:

Assertion failed: (area > 1.19209290e-7F), function ComputeMass, file /SourceCache/PhysicsKit_Sim/PhysicsKit-6.5.4/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape.cpp, line 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;

水平翻转我的角色 Sprite 。

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

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

我的解决方法:使用 photoshop 翻转并保存另一张图片。

最佳答案

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

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

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

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

关于ios - 将 iOS 更新到 7.1 后,Sprite-kit 游戏崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22525752/

相关文章:

ios - pkpass 无法在 iOS 上从电子邮件附件中打开

java - xmlvm 我的 android 到 iphone 项目

ios - 在同步 Web 服务数据上添加 UIActivityIndi​​catorView 并填充 UITableView

swift 3 (SpriteKit) : Aligning SKPhysicsBody to SKShapeNode

ios - 在应用程序午餐/退出应用程序时暂停和恢复游戏(SpriteKit Swift)

ios - 类型 'MyWeather'不符合协议(protocol) 'Encodable'错误

ios - 在新 Mac 上推送通知证书

iphone - 3.0.1 更新后配置 iPhone 时出现问题

objective-c - NSCombobox 的动态数据

ios - 将不同的发射器分配给随机的不同节点