Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.01.2011, 13:25
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 1  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
По умолчанию 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 но это ведь как то лево)


Последний раз редактировалось iNils; 12.01.2011 в 13:47.
Старый 12.01.2011, 13:36
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 2  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
"с помощью beginBitmapFill но это ведь как то лево)" - может и лево, но единственно ) (и рисует не в спрайт, а графикс).

по сабжу - юзайте матрицу.
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 12.01.2011, 17:52
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 3  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
Спасибо за совет. Сделал как вы сказали.

Вот что мне пришлось сделать чтобы перерисовать содержимое одного спрайта(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?

Старый 13.01.2011, 12:28
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 4  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от passertm Посмотреть сообщение
Разве 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). Очевидно, что скорее всего картинка будет неправильной.

Старый 13.01.2011, 13:36
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 5  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
Спасибо.
Это многое обьясняет. Точнее все кроме того почему не сделано нормального метода рисование картинки и почему не сделано метода для удаления.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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