2

フラッシュベースのアプリ用のシンプルなグラフィカルエディターを開発しています。私のエディターでは、スケーリングの可能性があり、スケーリングの範囲が大きくなっています(最大スケールは16.0、最小スケールは0.001、デフォルトスケールはです0.2)。したがって、ユーザーが太さ0.1または300.0で線を引くことができる可能性は十分にあり、線の可能な太さ(in Graphics.lineStyle())には上枠があるように見えます。livedocsからわかったように、最大​​値は255です。したがって、厚みが大きい場合は、255.0太さの線が引かれ255.0ます。上記の上部境界線が存在するかどうか、およびその大きさ。これが私の質問です:

  1. 現在、drawPath()またはlineTo()メソッドを使用して線を描画しています。厚みが大きい場合の自然なウォークアラウンド255.0は、セグメントの代わりに長方形を描画し、セグメントの端に(の代わりにlineTo())2つの円を描画することです。または、2つの薄いセグメントと2つの半円を描画して、内部を塗りつぶすこともできます。たぶんもっとエレガントで迅速な解決策がありますか?
  2. もう1つの質問は、線の太さが大きいがそれよりも小さい場合255.0(たとえば)、 2つの細いセグメントと2つの半円を使用して線を描画したり、内部を塗りつぶしたり100.0する方が速いのは何ですか?lineTo()
  3. そして最後に、誰かがflash.display.Graphicsクラスのすべてのメソッドの内容を読むことができる(またはグラフィックスで特定の記事/本をフラッシュしない)良い記事/本を知っているかもしれませんか?

どんな考えでもありがたいです。前もって感謝します!

4

1 に答える 1

4

私は、長方形や余分な円を描くよりも、線をコンテナに入れる方がおそらくより良く、より効率的であるというfaに同意します。

数学が難しいとは思いません。効率を上げるには、線のスタイルが255を超える場合にのみこれを行う必要があります。

線を保持するように表示オブジェクトを設定するには、線の幅を半分にすることから始めます(長さは同じままにすることができます)。次に、新しいスプライトを作成し、スプライトに半分のサイズで線を描画します(たとえば、300が必要な場合は、150で描画します)。すべての変換を新しいスプライトに適用できるように、(0,0)から開始して、セグメントをまっすぐに描画するのが最も簡単です。

ここから、スプライトのscaleYを2倍にして、目的の線の太さを得ることができます。それは同じ長さを保つべきであり、端も正しく丸められるべきです。

これがお役に立てば幸いです。

グラフィッククラスを操作するための優れたリソースは、FlashとMathです。このサイトには、いくつかのクールな効果と実用的な例とソースコードがあります。

http://www.flashandmath.com/

于 2012-10-22T15:10:35.807 に答える