Movieclip сохраняет растровое изображение в неправильных координатах - PullRequest
0 голосов
/ 09 октября 2011

У меня есть мувиклип внутри сцены, который в основном (не точно) центрирован по центру сцены.

Когда я пытаюсь сохранить мувиклип в растровое изображение, чтобы загрузить его на Facebook, я получаю обрезанное изображение или белое изображение (пустое).

Вот код для создания растрового изображения:

var source:BitmapData = new BitmapData(board.width, board.height);
source.draw(board);
var bitmap:Bitmap = new Bitmap(source);

В результате я получаю желтую область на следующем изображении:

Cropped Image

У меня также возникают проблемы с координатами при добавлении новых элементов в MovieClip, которые могут быть связаны, например, необходимость вручную задавать x и y для элемента, который я добавляю в MovieClip, поскольку он не добавляется из позиции 0 , 0 мувиклипа.

На вещах, основанных на прямом взаимодействии, mc.mouseX и mc.mouseY добавляются в правильное местоположение, однако на вещах, которые не являются обязательными, я должен устанавливать координаты, используя фиксированные числа.

Вспышка построена поверх основной сцены, с несколькими мувиклипами по бокам, выступающими в качестве кнопок, и мувиклипом «доска», который я и пытаюсь сохранить.

Как мне поступить, чтобы правильно сбросить координаты для мувиклипа или обрезать изображение с главной сцены?

Я попытался использовать localToGlobal для обрезки изображения, но безуспешно с помощью следующего кода:

var point:Point = new Point(stage.x, stage.y);
board.localToGlobal(point);

var rect:Rectangle = new Rectabgle(point.x, point.y, board.width, board.height);
var source:BitmapData = new BitmapData(board.width, board.height);
source.draw(stage, null, null, null, rect, true);
var bitmap:Bitmap = new Bitmap(source);

Ответы [ 2 ]

0 голосов
/ 09 октября 2011

Две вещи, которые могут помочь:

localToGlobal и globalToLocal возвращают преобразованную точку.

В вашем случае ваш код должен быть:

point = board.localToGlobal(point);

Проверьте метод getBounds (), чтобы получить область ограничивающего прямоугольника DisplayObject относительно некоторого другого DisplayObject. Может также быть полезным, если у вас есть дети в отрицательном координатном пространстве.

Так что код может быть что-то вроде:

var bounds: Rectangle = board.getBounds(stage);
var source:BitmapData = new BitmapData(bounds.width, bounds.height);
source.draw(stage, null, null, null, bounds, true);
var bitmap:Bitmap = new Bitmap(source);
0 голосов
/ 09 октября 2011

Попробуйте использовать матрицу преобразования (положение, вращение, масштаб) при вызове draw ():

var source:BitmapData = new BitmapData(board.width, board.height);
source.draw(board,board.transform.concatenatedMatrix);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...