0

私はActionScript3でシンプルなホワイトボードアプリを作成しています。ActionScriptのほとんどのホワイトボードまたはペイントアプリは、インターバル、タイマー、mouseMoveイベント、またはenterFrameイベントを使用して、マウスの位置を追跡し、追跡されたポイント間の線またはブラシをペイントする傾向があります。 。

私が達成しようとしているのは、Photoshopのようなプログラムがブラシツールでペイントしているときにレンダリングできる、滑らかなペイントラインです。Photoshopでは、マウスをキャンバス上でどれだけ速く動かしても、ペイントされた線は常に滑らかな曲線のエッジになります。私のアプリでは、前述の方法のいずれかを使用して、ブラシをステージにレンダリングする関数呼び出しの間に常にレイテンシーがあります。したがって、これらの手法のいずれかを使用すると、マウスを非常にすばやく円形に動かすときに、鋭い角のある線が生じる可能性があります。

これは私にとっては驚きではありません。Photoshopのブラシツールのように、より滑らかな線を実現する方法がわかりません。念のために言っておきますが、私のアプリのブラシは主に形状に基づいており、描画APIを使用して連続線を描画しないか使用できません。つまり、graphics.curveTo()はオプションではありません。また、ブラシによって生成されたスプライトまたはシェイプをBitmapDataインスタンスにレンダリングしています。

4

4 に答える 4

0

では、グラフィックAPIを使用していない場合、どのように線を描画しますか?(Graphics APIのlineBitmapStyle関数を確認することをお勧めします)。

ただし、描画方法に関係なく、前のポイントを使用してパスをカーブさせる方法(および量)を決定するために、2つのポイント間のブラシのパスを推定します。ベジェ曲線を読んだことがありますか?(http://en.wikipedia.org/wiki/B%C3%A9zier_curve

于 2010-02-23T15:56:50.377 に答える
0

私の解決策は、2つの手法を組み合わせたものになりました。私がやったことは、ブラシが使用/ペイントされているときのパスのプレビューを表示することでした。これが起こっているので、私は間隔の間のすべてのポイントを集めています。次に、ユーザーがマウスボタンを離すと、収集されたすべてのポイント間の2次ベジェ曲線を使用して、より正確な曲線のブラシストロークをペイントします。

于 2010-02-24T17:20:25.440 に答える
-2

より良い結果を得る唯一の方法は、フラッシュムービーに高いフレームレートを使用することだと思います。このように、1秒あたりのチェック数が増えるため、ラインがよりスムーズになります。

于 2010-02-23T15:59:52.367 に答える
-2

http://www.paultondeur.com/2008/03/09/drawing-a-cubic-bezier-curve-using-actionscript-3/

これを見てください:)いくつかのサンプルがあります

于 2010-02-23T16:11:17.597 に答える