次のようなポリゴンがある場合、衝突検出機能の領域を定義する方法がわかりません。
______
/ _____|
/ /
/ /
---
塗りつぶし/ストローク呼び出しの前に lineTo() を使用してポリゴンを数回描画するので、すべてのポイントの x、y 座標がわかります。
現在、ボールがポイントの特定の領域を超えているかどうかを確認するだけです:
if(tmpParticle.y <= platformBottom) {
if(tmpParticle.x < leftPipe_middleX || tmpParticle.x > rightPipe_middleX) {
tmpParticle = particleCollision(tmpParticle, platformBottom);
}
}
if(tmpParticle.y <= pipeBottom && tmpParticle.y >= pipeBottom - 30) {
if(tmpParticle.x < leftPipe_bottomRightX && tmpParticle.x > leftPipe_bottomLeftX) {
tmpParticle = particleCollision(tmpParticle, pipeBottom);
} else if (tmpParticle.x < rightPipe_bottomRightX && tmpParticle.x > rightPipe_bottomLeftX) {
tmpParticle = particleCollision(tmpParticle, pipeBottom);
}
}
platformHeight は「上部の水平線」の Y 値です platformBottom は「platformHeight のすぐ下の水平線」の Y 値です rightPipe* は示されている例です。leftPipe* は、他の方向を除いて同じポリゴン用です (パイプを形成するため、衝突せずにボールを発射する必要があります)。
私のparticleCollision()関数はtmpParticleを取り、Y値(2番目のパラメータ、すなわちpipeBottom)に基づいて方向を反転します。これは今のところ問題なく動作しますが、後で改善する必要があるかもしれません。
衝突の領域を定義するためのより良い方法を見つけ出す必要があります。