1

HTML5キャンバスでゲームをプログラミングしています。ラインが自分のラインまたは対戦相手のラインのいずれかのポイントに接触すると、そのラインは移動を停止します。私が書いた関数は以下のとおりです。

function hasPoints(x, y) {
  for (var i = 0; i < points.length; i++) {

    if (Math.abs(points[i][0] - x) < 2 && Math.abs(points[i][1] - y) < 2) {
        return true;
        break;
    }
  }
  return false;
}

//check if this point crosses other players' points
if (hasPoints(p1.x,p1.y) || canPlay==false) {
    clearLoop();
}else{
    context.fillStyle = "green";
    context.fillRect(p1.x,p1.y, 5,5);
    addPoints(p1.x,p1.y);       
    sendMyPoints();     
    loopTimer = setTimeout('drawLine()', 50);
}

ほとんどの場合機能します。しかし、いくつかの特別な場合(下の写真でわかるように)、それは単にfalseを返すことができません。

誰かが私がこの機能を改善して完璧に機能するように手助けしてくれませんか?

LineCrash

4

2 に答える 2

2

ドットを使用せず、ベクトルを使用してください。ベクトルの配列。ポイントが線 (ベクトル) と接触しているかどうかを調べるには、2 つのポイントを持つ三角形をマウントし、ポイント ベクトル分析を実行します。三角形の面積がゼロに近い (制限を設定する) 場合は、この接触.

y1 x1 1
y2 x2 1 = (y1*x2*1)+(x1*1*y3)+(1*y2*x3)-(x1*y2*1)-(y1*1*x3)-(1*x2*y3)
y3 x3 1
結果はゼロに近いはずです (0.012121 ...)
これは、線がターゲットの方向に整列しているかどうかを発見する方法
http://en.wikipedia.org/wiki/決定要因

于 2013-01-27T03:02:50.943 に答える
-1

ベクトルに数式を使用すると、ベクトルが交差するかどうかを確認できます

于 2013-01-27T03:50:15.570 に答える