Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   BitmapData, Sprite и проблема с draw (http://www.flasher.ru/forum/showthread.php?t=148830)

passertm 12.01.2011 13:25

BitmapData, Sprite и проблема с draw
 
Доброго времени суток.

Начну с проблемы с draw. draw игнорирует 5-й параметр который требует обрезание картинки при рисовании.
Думаю этот код должен был перемешать картинку на 100 пикселев в лево и в верх
Код AS3:

var r:Rectangle = driwing.getBounds(driwing);
 
var v:BitmapData = new BitmapData(r.right - r.left, r.bottom - r.top, true, 0);
var r2:Rectangle = new Rectangle(100, 100, v.width, v.height);
v.draw(driwing, null, null, null, r2);
 
desc.removeChild(driwing);
var b:Bitmap = new Bitmap(v)
desc.addChild(b);

А ничего подобного не происходит. Как пользоваться этим параметром.


И еще. столкнулся с нуждой нарисовать содержимое BitmapData в Sprite. Но не нашел нормального средства для этого(есть подозрения что получится реализовать с помощью beginBitmapFill но это ведь как то лево)

cleptoman 12.01.2011 13:36

"с помощью beginBitmapFill но это ведь как то лево)" - может и лево, но единственно ) (и рисует не в спрайт, а графикс).

по сабжу - юзайте матрицу.

passertm 12.01.2011 17:52

Спасибо за совет. Сделал как вы сказали.

Вот что мне пришлось сделать чтобы перерисовать содержимое одного спрайта(driwing) в другой(desc) используя BitmapData размера картинки(которую нужно отрисовать) а не всего спрайта.
Код AS3:

var r:Rectangle = driwing.getBounds(driwing);
 
var newBD:BitmapData = new BitmapData(r.right - r.left, r.bottom - r.top, true, 0);
 
var m:Matrix = new Matrix();
m.translate(-r.left, -r.top);
newBD.draw(driwing, m);
 
 
m = new Matrix();
m.translate(r.left, r.top);
desc.graphics.beginBitmapFill(newBD,m);
desc.graphics.drawRect(r.left, r.top, newBD.width, newBD.height);
desc.graphics.endFill();

Вот мне и не понятно. зачем это не хотело работать пока я не сделал
Код AS3:

m = new Matrix();
m.translate(r.left, r.top);

Разве BitmapData хранить информацию о матрице. Если хранит то зачем?
Если не хранит почему не получается без матрицы нарисовать содержимое BitmapData?

maxkar 13.01.2011 12:28

Цитата:

Сообщение от passertm (Сообщение 964076)
Разве BitmapData хранить информацию о матрице. Если хранит то зачем?
Если не хранит почему не получается без матрицы нарисовать содержимое BitmapData?

Не хранит. Но также и не хранит информацию об исходных координатах точек, которые были отрисованы в BitmapData. После отрисовки в (0, 0) BitmapData попадает (r.left, r.top) исходного изображения.

А нарисовать не получается, потому что вы хотите не того, что на самом деле делает beginBitmapFill + drawRect. Неверно ожидать, что (0, 0) от используемой текстуры будет в каком-то углу прямоугольника. Вообще, схема рисования с bitmapFill следующая:
  1. Берется исходная текстура с координатами (0,0).
  2. Размножатеся или растягивается по всей плоскости (параметр repeat)
  3. Ко всей плоскости применяется указанный Matrix.
  4. При необходимости применяется smoothing.
  5. На плоскости фигурой вырезается контур. При этом контур может быть невыпуклым, со внутренними вырезами и т.п. Контур может формироваться рисованием фигур (drawRect, drawCircle и т.п.) и рисованием примитивов (moveTo, lineTo, curveTo).
  6. Вырезанная область и является результатом отрисовки
Обратите внимание, что область (изображение) формируется до того, как нарисована первая точка. Ну и в вашем случае вы из размноженной картинки (0, 0, r.right-r.left, r.bottom-r.top) вырезаете прямоугольник (r.left, r.rigth, r.right-r.left, r.bottom-r.top). Очевидно, что скорее всего картинка будет неправильной.

passertm 13.01.2011 13:36

Спасибо.
Это многое обьясняет. Точнее все кроме того почему не сделано нормального метода рисование картинки и почему не сделано метода для удаления.

Но вам еще раз спасибо за труд)


Часовой пояс GMT +4, время: 13:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.