2016-04-04 3 views
0

У меня столкновение в моей игре javascipt между игроком, пулями и врагами. Раньше пули были прямоугольниками, но теперь у меня есть изображения. Изображения плотно вписываются в прямоугольную коробку, ожидается, что работа 2D-столкновения будет работать. Вот изображение: BulletПочему это 2D-столкновение полностью не работает для моих изображений?

Пуля несколько прямоугольная. Я использую эту логику в моей системе столкновения:

return rect1.x <= rect2.x+rect2.width 
    && rect2.x<=rect1.x+rect1.width 
    && rect1.y<=rect2.y+rect2.height//if all statements are true, they are  colliding 
    && rect2.y<=rect1.y+rect1.height; 

Collision несколько работ, однако, пуля может быть значительно ниже игрока и по-прежнему вызывает столкновение, и это может быть значительно третьим путем внутри игрока из верхних без инициируя столкновение. Есть ли что-нибудь, что я могу сделать, чтобы исправить это? Система столкновений работала безупречно с прямоугольниками и должна быть достаточно близко здесь, но она недостаточно хороша. Вот ссылка на мою фактическую игру в разработке, если вы хотите увидеть исходный код и проблему для себя: JS Game

ответ

1

Попробуйте удалить знаки равенства и не проверять наличие столкновений, но для того, чтобы быть «снаружи».

if (rect1.x + rect1.width < rect2.x) //left outside 
    return false; 
if (rect1.x > rect2.x + rect2.width) //right outside 
    return false; 
if (rect1.y + rect1.height < rect2.y) //above/below outside 
    return false; 
if (rect1.y > rect2.y + rect2.height) //above/below outside 
    return false; 
return true; 

(Вы также можете обернуть их в одну линию, но я надеюсь, что это ясно дает понять, что я хочу сказать) Работает ли этот пример отличается для вашей игры?

+0

Я пробовал использовать ваш код, и результат был тот же. Это работает с прямоугольниками, но по какой-то причине оно смещается с изображением. Я пытался играть со значениями. Если rect1y

+1

Тогда кажется, что ваша проблема может быть скорее в размещении ваших изображений, чем при обнаружении конфликтов. Как вы вставляете свое изображение в свой (невидимый) прямоугольник? – Jankapunkt

+0

Вы правы, это проблема размещения. Верхний левый угол изображения был у его x и y, однако при столкновении было сделано для того, чтобы эти координаты находились в центре. Я сделал это сейчас: drawImage (img, x-width/2, y-height/2, width, height). спасибо –