私の SpriteKit ゲームでは、ランダムに配置された多数のタイル ノード (>100) があり、タイルとキャラクター ノード間の衝突を検出できる必要があります。これを行うには、SKPhysicsBody を使用します。
SKPhysicsBody コードを有効にすると、フレーム レートが約 40 fps に低下することがわかりましたが、コードをコメント アウトすると、60 fps に上がります。これは、エンジンがフレームごとに 100 以上のノードの物理をシミュレートしようとしていることに関係していると思います...これが起こらないようにしながら、キャラクターとタイルの間の衝突を検出する方法はありますか?
タイルの物理演算については、タイルに次のコードを使用しています。
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:size];
self.physicsBody.affectedByGravity = NO;
self.physicsBody.categoryBitMask = WallCategory;
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = CharacterCategory;
そして私のキャラクターのために:
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:size];
self.physicsBody.usesPreciseCollisionDetection = YES;
self.physicsBody.restitution = 0;
self.physicsBody.friction = 0;
self.physicsBody.linearDamping = 0;
self.physicsBody.categoryBitMask = CharacterCategory;
self.physicsBody.contactTestBitMask = 0xFFFFFFFF;
self.physicsBody.collisionBitMask = BoundaryCategory;