私の現在のプロジェクトには、スプライトがゲーム シーンで経験する力に応じて移動する重力シミュレーターが含まれています。
私の機能の 1 つは、移動するスプライトの背後に線を描画できるようにすることで、スプライトがたどるパスを確認できるようにすることです。
ここに示されています:
ただし、スプライトが画面上で動き続けると、FPS が急降下し始めます。これは、スプライトが最初に動き始めてから時間が経過したこの 2 番目の画像で確認できます。
調査したところ、他の人が同様の問題を投稿していることがわかりました。
ただし、上記の質問では、答えのポスターは、それ (答え) がstatic imageを対象としていると詳述していましたが、これは私が望むものではありません。この行は、スプライトパスに影響を与えるものに応じてリアルタイムで変化するためです。動作しなかった古い行に新しい行を追加する機能を実装しようとしたときに反映されました。そのコードはこちら
すべての描画操作に起因するこの絶え間ない FPS の低下を適切に停止する方法を見つけるのを手伝ってくれる人がいるかどうかを尋ねています. 現在の描画コードは 2 つの関数で構成されています。
-(void)updateDrawPath:(CGPoint)a B:(CGPoint)b
{
CGPathAddLineToPoint(_lineToDraw, NULL, b.x, b.y);
_lineNode.path = _lineToDraw;
}
-(void)traceObject:(SKPlanetNode *)p
{
_lineToDraw = CGPathCreateMutable();
CGPathMoveToPoint((_lineToDraw), NULL, p.position.x, p.position.y);
_lineNode = [SKShapeNode node];
_lineNode.path = _lineToDraw;
_lineNode.strokeColor = [SKColor whiteColor];
_lineNode.antialiased = YES;
_lineNode.lineWidth = 3;
[self addChild:_lineNode];
}
updateDrawPath: スプライトの最新の位置に線を描画します。
traceObject: SKPlanetNode (SKSpriteNode のサブクラス) を受け取り、その後に線が描画されるように設定します。
誰かがこれを行う方法を提案し、私が蓄積し続けるひどいオーバーヘッドを減らすことができれば、それは素晴らしいことです.