![]() |
BitmapData.draw для вывода покадровой анимации
Здравствуйте!
Допустим, я пишу игру на Flex и у меня есть класс AnimatedObject, который не наследует от DisplayObject и не участвует в иерархии flash сцены. Грубо говоря, он должен выводить определенный кадр своей картинки в заданных координатах. Для этого я в менеджере объектов прохожу по всем объектам и вызываю onDraw, передавая в качестве аргумента backBuffer : BitmapData, в который каждый должен нарисовать себя. Вот так метод был реализован: Код AS3:
Что происходит? :) Спасибо большое! |
Для этой цели надо использовать copyPixels, т.к. clipRect обрезает изображение, но не двигает его. Т.е. если у вас конечная битмапа размером 100х100, а исходная 200х100 и вы к исходной применяете clipRect(100, 0, 100, 100), то ее видно не будет, т.к. она не попадает в размеры конечной битмапы.
|
Проблема с copyPixels в том, что она не позволяет применять трансформации поворота и масштабирования, которые в моем случае обязательны.
|
Как это? Т.е. надо из исходной битмапы вырезать кусок, причем координаты этого куска ависят от скэйла и угла? Не могу представить для чего это нужно.
|
Представьте, что у меня есть картинка, в которую последовательно врисованы 30 кадров анимации. Мне нужно вывести определенный кадр из этой анимации, причем вывести в позиции (x, y), повернутый на угол rotation, увеличенный на scale коэффициент.
|
Тогда я правильно говорил - copyPixels, затем экземпляру Bitmap задаете масштаб и поворот. Или создаете еще одну битмапДату, куда методом draw и с заданной матрицей рисуете скопированную методом copyPixels битмапДату.
|
Matrix спасет мир)
|
Набросал тут классик)
Код AS1/AS2:
пример Код AS1/AS2:
|
MovieClipFactory у etc кстати ещё есть.
|
Большое спасибо всем за ответы!
Wolsh, хотя ваш FilmViewer решает немного другие задачи и не показывает ту проблему, с которой я столкнулся, но вы мне подсказали кое-что интересное. Вобщем, я решил свою задачу другим способом, но проблема все еще актуальна. Сведения в документации по параметру clipRect для метода BitmapData.draw не соответствуют действительности в моем случае. Пожалуйста, если кто-то может, сделайте пробный тест? |
Juster, Вы не поняли. Все нормально в документации. Берется действительно ТОТ Ректангл из исходного изображения, который Вы указываете. Просто он отрисовывается в вашу конечную битмапДату в ТЕ ЖЕ координаты. А битмапДаты там у Вас уже нет, правда?)) У копиПиксел есть параметр - Пойнт, В КОТОРЫЙ отрисовывать этот Ректангл, а у метода draw такого параметра тупо нет. Отрисовка идет в те же координаты, что указаны в Ректангле.
|
Теперь я понимаю. Спасибо!
Значит мою задачу нельзя решить одним вызовом draw. |
Ну попробуйте задать смещение на координату кадра по х в Матрице (назад, влево))).
Но все равно совершенно не понимаю, чем Вас копиПиксел не устраивает)) |
CopyPixels - не дает масштабирования и поворота :)
Смещение пробовал задавать, но это не помогло, все сходится к тому, что отсечение производится уже после трансформаций. Проблема решена, просто менее производительным способом, чем я ожидал. |
| Часовой пояс GMT +4, время: 07:43. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.