Ваш код обнаружения столкновения, кажется, работает в приведенном примере, если вы установите blueGamePiece.speedX = -5
. Если ваша цель состоит в том, чтобы заставить два тела обмениваться скоростями при столкновении, вам поможет следующее:
this.collide = function (otherobj) {
// swap X speeds
temp = otherobj.speedX;
otherobj.speedX = this.speedX;
this.speedX = temp;
// swap Y speeds
temp = otherobj.speedY;
otherobj.speedY = this.speedY;
this.speedY = temp;
}
Это просто меняет скорости без отрицания (обратите внимание на временные переменные temp
), что приводит к тому, что столкновения работают нормально, и объекты перемещаются в противоположных направлениях. Если вы хотите использовать правильный импульс, вы можете попытаться настроить код для использования соответствующих формул.