Я пытаюсь преобразовать имеющийся у меня Sprite в BitmapData, чтобы я мог выполнить некоторое обнаружение столкновений. В использовании Спрайтов есть несколько моментов, которые делают это более трудным, чем я ожидал:
- Сам спрайт - это контейнер, в котором находится другой спрайт, на котором нарисована коробка. Внутренний спрайт расположен в отрицательной половине его ширины и высоты, так что его можно поворачивать из центра через контейнер.
- Контейнер может вращаться под любым углом в любое время
Таким образом, мой подход до сих пор был попыткой нарисовать внешний Sprite на новый объект BitmapData с матрицей, чтобы учесть разницу. Хотя я могу использовать Матрицу, чтобы заставить эту работу работать для одного конкретного угла поворота, я не могу найти способ заставить ее работать для любого вращения.
Вот что я делаю, чтобы нарисовать новые BitmapData:
var p:Product = getProduct(); // Product is the container with the inner sprite
var bounds:Rectangle = p.getBounds(stage);
var bd:BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00FFFFFF);
var m:Matrix = p.transform.matrix;
// Somewhere here is what needs to be changed, I can't figure out how though
m.tx = 0;
m.ty = 0;
bd.draw(p, m);
С m.tx = 0 & m.ty = 0, вот пример того, что я получаю и чего я хочу получить:
Желтое изображение справа - это фактическое поле, а черный контур - это «контейнер», который поворачивается. Изображение слева - это то, что я получаю для BitmapData, где я хочу, чтобы желтое поле не было обрезано. В этом примере я мог бы просто перевести tx и ty на половину ширины и высоты, что сработало бы.
Лучшим примером будет, когда он действительно повернут:
Перевод на ту же сумму, что и в предыдущем примере, больше не будет работать, и поле все равно будет обрезано. Я осмотрел некоторые решения, опубликованные ранее, или предложения других людей, но они, похоже, не работают для меня из-за моего контейнера Sprite и ротации.
Я бы очень признателен за любую помощь по этому вопросу.
Спасибо!