Цитата Сообщение от 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) можно изменять размер отсекаемых углов. Поправьте меня, если я что-то не так понял.