【问题标题】:bodyWithEdgeLoopFromRect Assertion failedbodyWithEdgeLoopF​​romRect 断言失败
【发布时间】:2013-12-06 01:27:21
【问题描述】:

尝试在我的 iOS7 Sprite 套件项目中设置物理世界时收到以下错误。

Assertion failed: (count >= 3), function CreateLoop, file /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Collision/Shapes/b2ChainShape.cpp, line 35.

奇怪的是,在我向项目中添加新场景之前,我使用的代码可以正常工作。我将我的项目恢复到它正确运行的最后一个已知时间,但它仍然无法正常工作。一旦我移除物理世界,该项目就会建立。

(SKNode*) myWorld = [SKNode node];
[self addChild:myWorld];

map = [SKSpriteNode spriteNodeWithImageNamed:@"background1"];
map.position = CGPointMake(0.0, 0.0);
[myWorld addChild:map];

//Setup physics
self.physicsWorld.gravity = CGVectorMake(0.0, 0.5);
self.physicsWorld.contactDelegate = self;

CGRect worldFrame = CGRectMake(map.frame.origin.x, map.frame.origin.y-1150, map.frame.size.width, map.frame.size.height + 2000);

myWorld.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:map.frame];
myWorld.physicsBody.categoryBitMask = wallCategory;

程序在尝试执行时终止……

myWorld.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:map.frame];

如果我把这段代码放到一个新项目中,它工作得很好。对我的项目发生了什么以及如何解决它有任何想法?

【问题讨论】:

  • 为 NSException 添加符号断点,看看它为什么会终止。此外,在崩溃的行添加断点并查看您创建的所有对象的值。如果您不使用它,为什么要创建 worldFrame?

标签: ios7 sprite-kit skphysicsbody


【解决方案1】:

检查地图是否为非零。该错误表明没有足够的顶点(最少 3 个),如果您传入零矩形,则只有在矩形中才会发生这种情况,因为地图为 nil 或框架没有宽度/高度。

【讨论】:

  • 我无意中用另一种方法将地图的比例设置为零。谢谢兄弟!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 2021-03-16
  • 2010-09-26
  • 2018-11-09
  • 2021-01-20
  • 2014-06-10
相关资源
最近更新 更多