当我有一个看起来像这样的多边形时,我不确定如何定义碰撞检测功能的区域:
______
/ _____|
/ /
/ /
---
我在填充/描边调用之前使用 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 将是“平台高度正下方的水平线”的 Y 值 rightPipe* 用于所示示例。leftPipe* 用于相同的多边形,但在另一个方向除外(形成管道,您必须将球射过而不会发生碰撞)。
我的particleCollision() 函数只接受tmpParticle 并根据Y 值(第二个参数,即pipeBottom)反转方向。虽然我以后可能需要改进它,但现在它工作得很好。
我只需要找出一种更好的方法来定义碰撞区域。