Кажется, что вы применяете фильтр к исходному изображению, когда вы хотите применить фильтр к повернутой версии исходного изображения.
Если вы внимательно посмотрите на документы для BitmapData,Функция применения фильтра выполняет следующие действия:
Берет исходное изображение и объект фильтра и генерирует отфильтрованное изображение.
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#applyFilter
Ваша заявкаФильтр вызывает переписывание преобразования матрицы, которое вы выполняете в функции draw (), с новой, не повернутой копией исходного изображения.ApplyFilter () похож на draw, за исключением того, что он применяет фильтр вместо матрицы преобразования.В этом случае вы применяете трансформационную матрицу к matrixImage.draw()
(для поворота), а затем записываете эти данные с помощью matrixImage.applyFilter()
(для раскраски).
РЕШЕНИЕ Быстрое решениебыло бы сделать следующее изменение:
matrixImage.applyFilter(matrixImage, matrixImage.rect, point0, colorMatrix);
Это имеет matrixImage применить цветовой фильтр к себе, после того, как оно станет повернутым изображением.
Кстати: в этом случае я недумаю, вам нужно иметь два clone () объекта matrixImage.Достаточно просто конечного объекта, полученного из applyFilter (), поскольку он является источником и фильтром в одном.Но они могут вам понадобиться для другой игровой логики, которую вы не опубликовали.
ПРИМЕЧАНИЕ. Единственной проблемой этого решения является следующий скачок производительности: (из документации Adobe для BitmapData.applyFilter ())
Если объект BitmapData и объект, указанный в качестве параметра sourceBitmapData, являются одним и тем же объектом, приложение использует временную копию объекта для выполнения фильтра.Для достижения максимальной производительности избегайте этой ситуации.
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#applyFilter
Создание этих временных копий очень ресурсоемко, поэтому просто создайте один буферный объект и используйте его намного быстрее.Если вы обнаружите проблемы с производительностью, лучше всего создать третий объект BitmapData, который будет действовать как буфер между источником и фильтром.В этом случае у вас будет 3 объекта bitmapData вместо sourceBitmapData
и matrixImage
.