2016-09-19 18 views
0

私はSprite Kitで少し実験していましたが、しばらく私のアプリケーションを実行させたときにクラッシュすることに気付きました。Appクラッシュ:メモリの問題?

var ref: CGMutablePathRef = CGPathCreateMutable() 
var shapeLine: SKShapeNode! 

override func update(){ 

shapeLine.removeFromParent() 

CGPathAddLineToPoint(ref, nil, player.position.x, player.position.y) 

shapeLine = SKShapeNode(path: ref) 
shapeLine.lineWidth = 3 
shapeLine.path = ref 

addChild(shapeLine) 
} 

そして、これはかなりうまく動作します、私は更新し、ノード毎回を削除します。私は何をしようとしている

は、私はそうのようにこれをしなかった、私のプレーヤーの動きを次の行を描画することです新しいパスを持つ別のノードを作成します。

ポイントは数秒後(約25秒後)にクラッシュします。 毎回ノードを追加したり削除したりするので、ノードは一定です。フレームレートはクラッシュする直前に減少し始め、30fpsから20fpsになります。

私が奇妙に感じるのは、メモリを使用することです。クラッシュする前に約800MBを使用することさえ増えます。

私が忘れているものがありますか、それともPathがあまりにも多く処理されるだけですか?

+0

既存の 'shapeLine'のパスを変更して問題の一部が新しい' SKShapeNode'を継続的に作成したものかどうかを確認するための実験を試してみませんか?言い換えれば、 'shapeLine'を一度作成してから他の時間はパスを更新するだけです。 –

+0

すでに試してみましたが、同じ結果が得られます:/ – DevX10

+0

これはどのくらいの頻度で実行されますか?すべてのフレーム?たとえば、25秒間、 'update'が何回呼び出されましたか? –

答えて

0

残念ながらSKShapeNodeが盗まれていますが、このライブラリコンポーネントの周辺には多くのバグがあり、そのほとんどはhereと報告されています。

SKShapeNodeSKSpriteNodeで使用するよりもテクスチャ(textureFromNode)に変換できます。

+0

こんにちは、お返事ありがとうございます。「textureFromNode」を使用してどういう意味ですか、これをどのように使用して動作させるかの例を教えてください。 – DevX10