|
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Разделение атласа
Приветствую, пытаюсь разделить уже существующий атлас старлинга на исходные пнгшки, затык случился на случаях когда регион повернут на 90 градусов, все что смог сделать - это сначала вырезать из атласа регион, и уже потом его вписывать с поворотом во фрейм. Возможны ли тут более элегантные решения с использованием одной битмапДаты?
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); |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
Зачем в рантайме делить атлас, если его можно нарисовать итак? например в graphics.beginBitmapFill или в общий BitmapData холст каждый кадр
А так решается для повернутых изображений одним draw с нехитрой комбинацией матрицы, а для не повернутых и вовсе одного copyPixels достаточно cos(90°) = 0 sin(90°) = 1 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. |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
Спасибо за ответ, попробую.
в рантайме, потому что это именно приложение анпакера. на входе атлас - на выходе zip архив с разделенными файлам |
Часовой пояс GMT +4, время: 18:49. |
|
« Предыдущая тема | Следующая тема » |
|
|