7

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 に設定しましたが、役に立ちません。

4

1 に答える 1