私はHTML5ゲームに取り組んでいます。トロンスタイルのゲームであるゲームで、キャンバスにテールラインを描き、交差点を確認する必要があります。
私は実際に JCanvasのdrawLine()
関数 を使用していますが、JCanvasは線の交差をチェックする方法を提供しませんでした。ソースを掘り下げて、ctx
オブジェクトの使用を見つけました。 、そして使用している関数の最後にオブジェクトを返したので、ctx.isPointInPath()
メソッドを使用して必要なことを達成できますが、機能していません。毎回false
を返しています。
パスが何であるかを本当に理解していません-ctx.isPointInPath()
の後にctx.moveTo()
を使用して設定されたポイントに対してのみctx.beginPath()
はtrue
を返しますか?または、ctx.moveTo()
を使用して接続されている2つの連続するctx.lineTo()
の間にあるすべてのポイントに対してtrue
を返しますか?
ctx.closePath()
の用途は何ですか?
そして、の違いは何ですか:
{
ctx.closePath();
ctx.fill();
ctx.stroke();
}
そして:
{
ctx.fill();
ctx.stroke();
ctx.closePath();
}
これは、ベクトル形状の境界を定義する一連のパスコマンド(moveTo、lineTo、arcToなど)です。その後、必要に応じてパスを塗りつぶしたり、ストロークしたりできます。
closePath()
の使用とは何ですか?_// Draw a red path using closePath() in the middle
ctx.beginPath();
ctx.strokeStyle = 'red';
ctx.moveTo(50,100);
ctx.lineTo(100,150);
ctx.lineTo(150,100);
ctx.closePath();
ctx.lineTo(50,50);
ctx.stroke();
// Slide the next path over by 150 pixels
ctx.translate(150,0);
// Draw a blue path using the exact same commands, but without closePath
ctx.beginPath();
ctx.strokeStyle = 'blue';
ctx.moveTo(50,100);
ctx.lineTo(100,150);
ctx.lineTo(150,100);
//ctx.closePath();
ctx.lineTo(50,50);
ctx.stroke();
_
closePath()
を使用すると、ペンのポイントが現在のサブパスの開始点に戻り、現在のポイントからその開始点に線を引き戻します;次のコマンドは、この新しいポイントから始まります。最後の線を明示的に描画せずに、完全に輪郭を描かれた形状を描画する場合に便利です。
これは、現在のサブパスの最初のポイントの場所でlineTo()
を呼び出し、続いて同じポイントにmoveTo()
を呼び出す(新しいサブパスを確立する)ことと同じです。
上記のように、最初のV
を使用し、次の2つのmoveTo
コマンドを使用してlineTo
シンボルを描画します。赤いパスでclosePath
を呼び出すと、水平バーが横に描画され、次の行が左上隅から開始されます。
青いパスでclosePath
を呼び出さない場合、次のlineTo
コマンドは最後に描画されたポイントから続行されます。
closePath()
は、ほとんどの場合不要であることに注意してください。これは、新しい描画を開始するたびに呼び出す必要があるbeginPath()
とは異なります。道。 (そうでない場合、古いパス描画コマンドはすべて次の描画の一部になります。)
これは、閉じたパスの基本的な表現です。
_ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(100,0);
ctx.lineTo(100,100);
ctx.lineTo(0,100);
ctx.closePath(); // <--the image right side has this line
ctx.stroke();
_
closePath()
の結果は、開始点と終了点が制限されることです。