Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   canvas и метод arc (https://javascript.ru/forum/events/33223-canvas-i-metod-arc.html)

cyber 17.11.2012 15:39

melky, опять спустя день понял в чем фишка, спс.
На ночь лучше не думать и не писать)

cyber 17.11.2012 22:05

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

буду благодарен за любые подсказки...

Дзен-трансгуманист 17.11.2012 23:13

cyber,
В случае с шариком, коллизии и углы отражения становится считать легче, если на уровне логики движка принять шарик за материальную точку, а фигуры расширить радиально на величину радиуса шарика.

melky 18.11.2012 00:18

cyber, опять постишь на ночь? или это я уже туплю .. при чём тут строки? что это? почему нельзя определять принадлежность каждой крайней точки (top left; top right; bottom left; bottom right) к окружности (шарику) ?

cyber 18.11.2012 01:29

melky, шарик может не только с крайней точкой соприкоснуться а и в любом другом месте допустим он зацепит нижней частью блок , вот 2 варианта

и тогда прийдеться проверять все точки вокруг блока..

cyber 18.11.2012 01:31

Дзен-трансгуманист, не совсем понял, если их разширить то тогда шарик будет на фигуре то будет ее затирать по ходу смещения, а если увеличить просто размеры обьектов то он начнет их уничтожать до визуального контакта..

Дзен-трансгуманист 18.11.2012 04:40

cyber,
Да нет же! Для игрока всё визуально остается без изменений. Я просто иллюстрирую как должен выглядеть механизм обработки столкновений изнутри.


Столкновения с углами - самые сложные. Я тебе специально изобразил эту механическую симметрию. Там, где ты видишь скругления - это просто окружности, центр каждой из которых находится в одном из исходных углов, и три четверти которых скрыты под внешними горизонтальными и вертикальными отрезками. Когда точка падает на такую окружность, отражение легко посчитать: нужно просто вычислить направление нормали (радиус-вектора) в точке соприкосновения, обратить направление падения и зеркально отразить его от нормали.
Касательную я изобразил просто для наглядности принципа, известного как "угол отражения равен углу падения". А нормаль выходит наружу под прямым углом к этой касательной, то есть это просто вектор, направленный из центра окружности к нашей точке в момент их столкновения.

Вот. А теперь докажи мне на практике, что мои труды по рисованию не были бесполезны - а не то я разозлюсь и сделаю свой собственный арканоид! :)

cyber 18.11.2012 14:08

Дзен-трансгуманист, спасибо, буду вспоминать геометрию
Цитата:

Вот. А теперь докажи мне на практике, что мои труды по рисованию не были бесполезны - а не то я разозлюсь и сделаю свой собственный арканоид!
все будет в лучшем виде))

Дзен-трансгуманист 18.11.2012 22:45

Цитата:

Сообщение от cyber
буду вспоминать геометрию

Да в сети есть куча ресурсов и форумов, где конкретно эта тема столкновений в 2D разжевывается раз в сто лучше, чем могу разжевать я. Можно на том же геймдеве поискать.
Супер-оптимизаций никто от тебя не требует, просто организуй всё так, чтобы хотя бы не тормозило.))

melky 18.11.2012 22:54

Цитата:

Сообщение от Дзен-трансгуманист
Да в сети куча ресурсов и форумов, где конкретно эта тема столкновений в 2D разжевывается раз в сто лучше, чем могу разжевать я. Можно на том же геймдеве поискать. Тебе же просто нужно организовать всё так, чтобы хотя бы не тормозило.)

http://www.gamedev.ru/code/forum/?id=147255&page=3

классный ресурс, кстати


Часовой пояс GMT +3, время: 23:28.