0

現在、SpriteKit を初めて試し、いくつかのアクションを使用しています。作成したすべてのノード/スプライトを削除する必要があるという印象を受けましたが、何らかの理由で、画面の高さを超えるとすぐに削除されます。これは SpriteKit の通常の動作ですか?

これがコードです。私は基本的に、アクションを使用して画面全体でスプライトをアニメーション化しています (protrait モードでは下から上へ)。面白いことに、作成したスプライトの数に関係なく、ノード数は 0 のままです。実際にはそれらをカウントしますが、画面の高さを超えるとすぐにそれらを減算します。

-(void) shoot
{
    bullet = [SKSpriteNode spriteNodeWithImageNamed:@"bullet"];
    bullet.position =  CGPointMake(airPlane.position.x, airPlane.position.y + 50);
    [self addChild:bullet];

    SKAction *moveBullet = [SKAction moveTo:CGPointMake(airPlane.position.x, self.size.height + 20) duration:0.5];

    [bullet runAction:moveBullet];
}

スプライトが画面の高さを超えないようにアクションを変更すると、ノード数がカウントを維持します。

この行を変更...

SKAction *moveBullet = [SKAction moveTo:CGPointMake(airPlane.position.x, self.size.height + 20) duration:0.5];

...これに

SKAction *moveBullet = [SKAction moveTo:CGPointMake(airPlane.position.x, self.size.height) duration:0.5];

繰り返しますが、これは SpriteKit の通常の動作ですか?

どうもありがとう

4

2 に答える 2

1

スプライト キットはより良い結果を得るためにテクスチャをメモリに保持するため、メモリ リークが発生する可能性があります

例えば

 [self enumerateChildNodesWithName:name usingBlock:^(SKNode *node, BOOL *stop) {

            if(node.x>900)
            {
                //remove all the action
               [node removeAllActions];
                //remove node from parent
               [node removeFromParent];
                //set nil//not required set automatically to nil when node is remove from parent 
               node=nil;
             }
        }];
于 2014-06-25T08:22:54.510 に答える
1

右下隅に表示されるノード数は、画面にレンダリングされているノードの数を示しています。これらは、シーン内のノードの総数を示すものではありません。

次のコードを使用します

[skView setValue:@(YES) forKey:@"_showsCulledNodesInNodeCount"];

あなたが呼んだ同じ場所で

skView.showsFPS = YES;
skView.showsNodeCount = YES;

また、こちらの回答もご覧ください。

于 2014-06-22T12:10:47.333 に答える