Мне нужно повторить то, что я уже должен сделать на чертеже
Ну, вы могли бы создать новый контекст рендеринга, нанести на него одну повернутую белую маску фона, установить операцию компоновки на lighter
и нанести другую повернутую маску сверху с заданным смещением.
Теперь, если остался небелой пиксель, есть хит. Вам все равно придется getImageData
и просеять пиксели, чтобы это выяснить. Возможно, вам удастся немного уменьшить эту рабочую нагрузку, уменьшив результирующее изображение вниз (полагаясь на сглаживание, чтобы некоторые пиксели не были белыми), но я думаю, что это, вероятно, все еще будет довольно медленным.
Я должен проверять наличие столкновений в каждом кадре, что делает его довольно дорогим.
Да, я думаю, реально вы будете использовать предварительно рассчитанные таблицы столкновений. Если у вас есть место для этого, вы можете сохранить один бит попадания / отсутствия попадания для каждой комбинации спрайта a, спрайта b, относительного вращения, относительного-x-нормализованного к вращению и относительного-y-нормализованного к вращению , В зависимости от того, сколько у вас спрайтов и сколько шагов вращения или движения, это может быть довольно большим.
Компромисс будет заключаться в том, чтобы хранить предварительно повернутые маски каждого спрайта в массиве JavaScript (из Number, предоставляя 32-битные / легко доступные данные &&
) или в виде символа в Sring, давая вам 16 бит) и &&
каждая строка пересекающихся спрайтовых масок вместе.
Или отказаться от пикселей и начать смотреть, например. пути.