2

objectif-c と sprite-kit の開発は初めてです (ただし、プログラミングは未経験です)。だから私はAppleのSpriを始めています。アプリは完璧に動作しますが、岩がシーンの底から落ちると、岩を表すノードがその親から自動的に削除されます。これは、 -(void)didSimulatedPhysics メソッドを実装せずに:

- (void)didSimulatedPhysics
{
  [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {
    if (node.position.y < 0)
      [node removeFromParent];
  }];
}

画面に表示されているノード カウンターを見ると、岩の数が増えても増加しないことがわかります。だから私の質問は: Xcode は私のプログラムの removeFromParent メソッドを管理していますか? はいの場合、無効にするオプションを教えてください。ARC を NO に設定しようとしましたが、何も変わりません。

私のメッセージが明確であることを願っています。そうでない場合は、教えてください。ご回答ありがとうございます。

ラファエル

4

2 に答える 2

5

画面に表示されているノード カウンターを見ると、岩の数が増えても増加しないことがわかります。

これは、スプライト キットがデフォルトで「レンダリングされた」ノード (つまり、画面上のノード) のみをカウントするためです。選別されたノードを表示するには、ドキュメントに記載されていない追加のデバッグ フラグを有効にする必要があります。

[self.scene.view setValue:@(YES) forKey:@"_showsCulledNodesInNodeCount"];

または、シーンなどのノードの真のノード数を取得するには、ノード数をログに記録する場所にこれを追加します。

NSLog(@"node count: %u", (unsigned int)self.children.count);

つまり、ノードをその親から削除しない場合、スプライト キットはいかなる状況下でもこれを自動的に行いませんただし、保持サイクルがない場合は、新しいシーンを表示するときに古いシーンのノード グラフがクリアされます (カスタム SKNode サブクラスで親ノードまたは兄弟ノードへの強い参照を保持している場合によく見られます)。

于 2014-04-02T12:43:43.843 に答える
0

シーンを表示するように SKView を注文する前に、次の行を呼び出す必要があります。

SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES; // This is what shows the node count.

Apple のドキュメントから、showsNodeCountプロパティは次のように説明されています。

ビューがシーンに表示されているノードの数を表示するかどうかを示すブール値。

したがって、Sprite Kit はそれらを親から削除しません。これらのノードがビューの境界内に戻ると、このノード数が増加します。

于 2014-04-02T12:47:50.083 に答える