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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.01.2017, 03:43
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 1  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
По умолчанию Разделение атласа

Приветствую, пытаюсь разделить уже существующий атлас старлинга на исходные пнгшки, затык случился на случаях когда регион повернут на 90 градусов, все что смог сделать - это сначала вырезать из атласа регион, и уже потом его вписывать с поворотом во фрейм. Возможны ли тут более элегантные решения с использованием одной битмапДаты?
Код AS3:
		var sub:SubTexture = atlas.getTexture(name);
				var regionWidth:Number = sub.rotated ? sub.region.height : sub.region.width;
				var regionHeight:Number = sub.rotated ? sub.region.width : sub.region.height;
				var regionData:BitmapData = new BitmapData(regionWidth, regionHeight);
				regionData.copyPixels(bitmapData, new Rectangle(sub.region.x, sub.region.y, regionWidth, regionHeight), new Point());
				var frameData:BitmapData = new BitmapData(sub.frame?sub.frame.width:sub.region.width, sub.frame?sub.frame.height:sub.region.height,false);
				var rot:Matrix = new Matrix();
				if (sub.rotated){
					rot.rotate(Math.PI / 2);
					rot.translate(regionHeight,0);
				}
				rot.translate(-(sub.frame?sub.frame.x:0), -(sub.frame?sub.frame.y:0))
				frameData.draw(regionData, rot);

Старый 24.01.2017, 23:48
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 2  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Зачем в рантайме делить атлас, если его можно нарисовать итак? например в graphics.beginBitmapFill или в общий BitmapData холст каждый кадр
А так решается для повернутых изображений одним draw с нехитрой комбинацией матрицы, а для не повернутых и вовсе одного copyPixels достаточно
cos(90°) = 0
sin(90°) = 1

Код AS3:
var sub:SubTexture       = atlas.getTexture(name);
var frame:Rectangle      = sub.frame || new Rectangle(0, 0, sub.rotated ? sub.region.height : sub.region.width, sub.rotated ? sub.region.width : sub.region.height);
var frameData:BitmapData = new BitmapData(frame.width, frame.height, true, 0x0);
if (sub.rotated)
{
	var matrix:Matrix  = new Matrix(0, -1, 1, 0, -frame.x - sub.region.y, -frame.y + sub.region.x + sub.region.width);
	var rect:Rectangle = new Rectangle(-frame.x, -frame.y, sub.region.height, sub.region.width);
	frameData.draw(bitmapData, matrix, null, null, rect);
}
else
{
	frameData.copyPixels(bitmapData, sub.region, new Point(-frame.x, -frame.y), null, null, false);
}


Последний раз редактировалось Nooob; 03.03.2017 в 02:28.
Старый 25.01.2017, 17:22
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 3  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Спасибо за ответ, попробую.
в рантайме, потому что это именно приложение анпакера. на входе атлас - на выходе zip архив с разделенными файлам

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

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

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


 


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


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