AS3 では、 beginFill()を使用して DisplayObject のグラフィック キャンバスに描画した後、 endFill ( )を使用して塗りつぶしを閉じると、パフォーマンスやメモリ消費に影響 (改善) がありますか?
それとも、別の場所で新しい塗りつぶしを開始できるように塗りつぶしを閉じるだけですか?
AS3 では、 beginFill()を使用して DisplayObject のグラフィック キャンバスに描画した後、 endFill ( )を使用して塗りつぶしを閉じると、パフォーマンスやメモリ消費に影響 (改善) がありますか?
それとも、別の場所で新しい塗りつぶしを開始できるように塗りつぶしを閉じるだけですか?
AS3 リファレンスでは、beginFill()
メソッドについて次のように述べています。
endFill()
3 つ以上のポイントが描画されるか、メソッドが呼び出されると、アプリケーションは塗りつぶしをレンダリングします。
endFill()
これは、メソッドが完全に必要ではないことを示唆しています。ただし、描画されるポイントが 3 つ未満の場合 (つまり、線のみを描画する場合)、 を呼び出すまで塗りつぶしはレンダリングされませんendFill()
。したがって、一般的にendFill()
は、塗りつぶしを閉じるのではなく、塗りつぶしをレンダリングするために基本的に使用されます。それでも、endFill()
メソッドのドキュメントには次のように記載されています。
現在の描画位置がmoveTo()
メソッドで指定された前の位置と等しくなく、塗りつぶしが定義されている場合、パスは線で閉じられてから塗りつぶされます。
endFill()
そのため、描画がユーザー入力に依存する場合に使用するのが最善です。
全体として、endFill()
終了したらいつでも使用することをお勧めしますbeginFill()
。このようにして、塗りつぶしが適切に完了したことを確認できます。を使用していることがわかっているすべての例で使用されているのを見てきましたbeginFill()
。したがって、必要でなくても、それは良い習慣です。それがパフォーマンスに著しく影響を与えるとは思えませんし、そうであればおそらく改善されるでしょう。
私はこの方法を集中的なアプリケーション (ビデオゲーム) でよく使用しており、これについても学ぼうとしました。違いに気づいたことがないので、パフォーマンスやメモリ消費には影響しません。後で描画する他の形状を塗りつぶさないようにフラグを変更するだけだと思います。
ただし、これを確認または否定する「公式」ソースを見つけることができなかったので、100%肯定的ではありません. 申し訳ありませんが、これが私があなたに与えることができる最善の答えです;)
このコードを試してみてください。endfill() は呼び出されませんが、それでも行がレンダリングされます。
var s:Sprite = new Sprite();
s.graphics.lineStyle(2, 0xff0000);
s.graphics.lineTo(200,150);
addChild(s);