Спрайт шире, чем тайл, но «левый-правый» код не проверяет в этом случае.Если я отображаю ваш код на графике, он просто проверяет, находится ли левый враг или правый враг в тайле:
(enemy.left > tile.left && enemy.left < tile.right
|| enemy.right > tile.left && enemy.right < tile.right)
// graphed as<br>
// TL EL TR ----- or ----- TL ER TR<br>
, но если весь тайл находится внутри вражеского региона, попадание не обнаружено
// EL TL ----- and ----- TR ER
Аналогично, Плитка меньше по размеру, чем противник, поэтому необходимо проверить, находится ли весь тайл внутри врага.Полный график / псевдокод:
is_hit :
// T{L,R,T,B} => tile, E{L,R,T,B} => enemy
// left-right:
[
TL EL TR ----- or ----- TL ER TR
. or .
EL TL ----- and ----- TR ER
]
.and.
// top-bottom:
[
TT ET TB ----- or ----- TT EB TB
. or .
ET TT ----- and ----- TB EB
]