Тема: [Starling] TestureAtlas vs Clipped Image
Показать сообщение отдельно
Старый 29.01.2014, 17:35
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Не придется ничего "разрезать" в буквальном смысле.

1. Создаем текстуру, ширина и высота которой, будучи равны степени двойки, окажутся достаточными, чтобы вместить в себя исходное изображение, и рисуем в нее изображение (например в верхний левый угол).
Код AS3:
var texW:int =  Math.pow(2, Math.ceil(Math.log(myImage.width) / Math.LN2));
var texH:int =  Math.pow(2, Math.ceil(Math.log(myImage.height) / Math.LN2));
var texBMD:BitmapData = new BitmapData(texW, texH, true, 0);
    texBMD.draw(myImage);
var texture:Texture = new Texture.fromBitmap(texBMD);
2. находим uv-координаты правого нижнего угла изображения.
Код AS3:
var imgCornerU:Number = myImage.width / texW;
var imgCornerV:Number = myImage.height / texH;
3. В цикле создаем изображения, каждое из которых будет отображать свою "полосочку".
Код AS3:
var stripImages:Array = [];
var dU:Number = imgCornerU / numStrips;
for (var i:int = 0; i < numStrips; i++)
{
    var image:Image = new Image(texture);
        // Если не путаю порядок вершин, то так:
        image.setTexCoordsTo(0, dU * i, 0);
        image.setTexCoordsTo(1, dU * (i + 1), 0);
        image.setTexCoordsTo(2, dU * i, imgCornerV);
        image.setTexCoordsTo(3, dU * (i + 1), imgCornerV);
    stripImages[i] = image;
}
Писал все прямо тут, работоспособность кода в таком виде не проверял, но суть как бы вот.
__________________
Поймай яблоко 2!