Sprite Kit低性能,在一个位置具有多个节点

fom*_*and 7 collision-detection ios sprite-kit

我已经设置了一个包含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];
}
Run Code Online (Sandbox Code Playgroud)

只要节点彼此保持距离,我就可以稳定60 fps.当我施加力使节点开始向场景中心移动并相互重叠时,性能会急剧下降到2-3 fps.我猜这与碰撞检测有关,而不是渲染(如果我用更大的半径初始化物理体,开始时性能非常低).我已将类别,接触和碰撞掩码设置为0,但它没有帮助.

Bil*_*ean 0

你最好的选择可能是预先渲染这个场景,而不是强迫 iPhone 经过 200 次碰撞检测,这无疑会造成压力。

  • 如果我错了,请纠正我,但我很确定 iPhone 4s 上的处理器应该能够处理 200 个简单物体之间的碰撞。听起来负载很小,尤其是当 iPhone 上有非常复杂的 3D 游戏时。 (7认同)