我已经设置了一个包含200个精灵节点的场景,并将它们随机放置在屏幕上,如下所示:
for(int i = 0; i < bubbleCount; i++) { CGSize size = [self getRandomSize]; SKSpriteNode *bubble = [SKSpriteNode spriteNodeWithTexture:texture size:size]; bubble.anchorPoint = CGPointMake(0.5,0.5); bubble.position = [self getRandomPosition]; bubble.name = BUBBLE; SKPhysicsBody *physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:size.width/2]; physicsBody.dynamic = YES; physicsBody.affectedByGravity = NO; physicsBody.allowsRotation = NO; physicsBody.categoryBitMask = 0; physicsBody.contactTestBitMask = 0; physicsBody.collisionBitMask = 0; bubble.physicsBody = physicsBody; [self addChild:bubble]; }
只要节点彼此保持距离,我就可以稳定60 fps.当我施加力使节点开始向场景中心移动并相互重叠时,性能会急剧下降到2-3 fps.我猜这与碰撞检测有关,而不是渲染(如果我用更大的半径初始化物理体,开始时性能非常低).我已将类别,接触和碰撞掩码设置为0,但它没有帮助.
解决方法
你最好的选择可能是预先渲染这个场景,而不是强迫iPhone通过200个碰撞检测体,这无疑会造成压力.