
Сообщение от
goodboy
как пример для алгоритмов Джонатана.
Видимо, какое-то недопонимание происходит. Как выглядит столкновение не квадратных спрайтов мне понятно.
Непонятно как работает вот это:
Код:
; Check (l, h) for collision with (c, b), cutting corners.
colc16 ld a,l ; x coord.
sub c ; subtract x.
jr nc,colc1a ; result is positive.
neg ; make negative positive.
colc1a cp 16 ; within x range?
ret nc ; no - they've missed.
ld e,a ; store difference.
ld a,h ; y coord.
sub b ; subtract y.
jr nc,colc1b ; result is positive.
neg ; make negative positive.
colc1b cp 16 ; within y range?
ret nc ; no - they've missed.
add a,e ; add x difference.
cp 26 ; only 5 corner pixels touching?
ret ; carry set if there's a collision.
Т.е. формула в конце алгоритма такая:
|(x1-x2)+(y1-y2)|<=25 то столкновение считается, если больше, то нет.
Мне не код непонятен, а именно геометрический (?) принцип лежащий в основе него. Я так понимаю, что манипулируя вот этим числом (в данном случае 25) можно изменять размер отсекаемых углов. Поправьте меня, если я что-то не так понял.