3

キャンバスに建物の大まかな輪郭を描こうとしています。各側面と上部の「屋根」に一連の正方形を作成し、基本的にペインターのアルゴリズムに従ってそれらを順番に描画することにより、以下の効果を実現しています。

左のスクリーンショットは、それがどのように見えるかを示しています。これは、各正方形を個別にペイントしています。

パフォーマンスを向上させるために、.stroke() と .fill() の呼び出しをできるだけ少なくしたいので、すべての moveTo() と lineTo() 呼び出しをキューに入れ、それらすべてを一度にペイントします。テストの結果、(少なくとも回線については) これにより大幅なパフォーマンスの向上が見られ、私自身も検証しました。

残念ながら、右のスクリーンショットからわかるように、建物を最後に一度だけペイントすると、レイヤリングが基本的に破壊されます。一見ランダムな順序で物事をペイントします。

キャンバスはこのように機能するはずですか?最初のスクリーンショットのように、描画するように指示した順序ですべてを描画しないのはなぜですか? この動作の回避策を知っている人はいますか?

3 d の建物をモックします。

4

1 に答える 1

1

すべての moveTos と lineTos などを 1 つの大きなバッチとして送信する場合、1 つの大きな形状 (すべての内側のストロークを表示する必要がある場所) をレンダリングしているかのようにそれらを描画します。

複数の描画操作を実行するとパフォーマンスがわずかに低下しますが、通常、コードの理解とデバッグを難しくする価値はありません。

于 2012-12-31T03:29:44.400 に答える