ユーザーがキャンバスに線を重ねずに線を引く必要があるアプリケーションがあります。オーバーラップをテストする方法はありますか? 私はすでにグーグルで検索しましたが、円と長方形が重なっている結果が見つかりました。私の場合は違います。ここで、ユーザーは線自体に重なることなくキャンバスに線を描きます。何かが不足している可能性があるため、ガイダンスをいただければ幸いです。ありがとう
1 に答える
ユーザーがマウスを使用して、ある種のペンツールで線を引くことを意味していると思います。
これが私がすることです:
まず、BitmapData オブジェクトに描かれた線のパスを保持します。
var lineBitmapData:BitmapData = new BitmapData(display.width,display.height,true,0x00000000);
これにより、ユーザーの線を含む透明なビットマップ オブジェクトが作成されます。
各フレーム (タイマーを使用する場合はタイマー イベント) で、次の操作を行います。
1.現在のマウス位置をキャプチャし、それを Point オブジェクトに入れます。
var currentMousePosition:Point = new Point(mouse.x,mouse.y);
bitmapData の左上隅を表すポイントも必要です。
var pt1:Point = new Point(1,1);
2.現在のマウス位置と lineBitmapData の間の衝突検出を実行する
var result:Boolean = lineBitmapData.hitTest(pt1, 0xFF, currentMousePosition);
hitTest メソッドの 2 番目のパラメーターはしきい値です。基本的に、これはヒットとしてカウントする最小のアルファ値に設定する必要があります。
3.hitTest の結果を確認します。false の場合、ユーザーがこのフレームを描画しようとしているものが、既に描画されたものと交差していないことを意味します。この場合、最後のフレームで描画されたビットを lineBitmapData に追加します。
ただし、hitTest が true を返す場合は、ユーザーが線を交差させようとしていることを意味するため、プログラムは描画 (または任意の動作) を停止する必要があります。
if(result){
myPenTool.stopDrawing();}else{
var drawnLastFrame:BitmapData = myPenTool.drawSingleFrameLine();
lineBitmapData.draw(drawnLastFrame);}
4. 新しい lineBitmapData を使用して、ユーザーが画面に表示する内容を更新します。