ios - Sprite Kit 低性能,一个位置有多个节点

标签 ios collision-detection sprite-kit

我设置了一个有 200 个 Sprite 节点的场景,并将它们随机放置在屏幕上,如下所示:

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 次碰撞检测,这无疑会造成压力。

关于ios - Sprite Kit 低性能,一个位置有多个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19893311/

相关文章:

android 2d弧形碰撞检测

ios - 如何使用 Swift 选择器?选择器不断将结果变为 `Type has no member`

ios - 在 SKSpriteNode 上叠加两个纹理

ios - Xcode 6 - Swift - 带导航的自定义标签栏

ios - 不同的单元格背景颜色取决于 iOS 版本(4.0 到 5.0)

collision-detection - Bullet Physics 中的运动体之间的碰撞

swift - 为什么这个 SpriteKit 程序不绘制任何东西?

ios - iOS 14.5 中的 CoreML 内存泄漏

ios - 我如何使用 Swift 格式化这些数据以便后端可以读取它?

javascript - Javascript/Jquery/Gamequery 中的每像素碰撞检测