|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
В целом это не наезд даже. Я могу понять, что Вам захотелось поиграться, и что для коммерческого проекта Вы не сможете использовать чужой контент даже если захотите. Я вобщем-то говорил о другом: что Вам это все совершенно не нужно. Что если Вы сами будете делать себе спрайтшиты (не Вы так художник), то у Вас будет нужная инфа по границам кадров, и никакой "алгоритм" резки по прозрачностям Вам не понадобится. Он никогда не будет надежен на 100%. Если просто хочется поиграться с нетривиальными методами битмапдаты, есть много всяких тем. Например, буквицы. То есть написать класс (метод?), умеющий создавать картинку заданной буквы заданного шрифта, размера и т.п., на прозрачном фоне, но залитую либо цветом, либо градиентом, либо заданной растровой текстурой. И, естественно, обрезанной четко по размеру буквы. И чтобы Ё не становилось Е, а Й — И
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
|
Цитата:
Заданный вопрос звучит вполне конкретно и я не затем его задавал, чтобы "слушать" нравоучения. Спасибо. Добавлено через 14 минут Цитата:
Создавая тему, я надеялся, что получится обсудить варианты создания подобного алгоритма с опытными флэшерами, имеющими дело с подобными вещами, но никак не обсуждать моральные аспекты использования чужого артворка в личных целях. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Мне тоже жаль, что Вы так и не поняли.
— Скажите мне, опытные люди, как выпить молоко молотком? — О____________о Чаво??? — Вот только не надо! Ежу же понятно, молоток и молоко! Как? — Да никак. Ну, то есть, можно конечно разбить бутылку и потом слизывать, но это будет очень долго и опасно. Лучше вот, трубочку возьмите. — Эх вы! Я то надеялся поговорить со знающими людьми о правильном алгоритме питья молока молотком, а вы! Вы поставили бессмысленную задачу. "Опытные флэшеры" сказали Вам, что она бессмысленная. Спрайтшиты придумали не для того, чтобы устраивать себе геморрой в рантайме. Вы ответили, что это такая игра, научиться делать что-нибудь бессмысленное. Силин Вам подыграл даже. Удачи.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2013
Адрес: (5, 5, 5)
Сообщений: 18
|
Цитата:
|
|
|||||
Lorem ipsum
|
Ресурс, предоставляющий лишь графику, надерганную из разных игр. Я спрашивал не о подобных помойках.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Oct 2013
Адрес: (5, 5, 5)
Сообщений: 18
|
А чем подобные помойки плохи для тренировок? Мне кажется для пробы пера вполне себе полигон для испытаний.
|
|
|||||
Lorem ipsum
|
Wolsh выше описал всю "ценность" этих тренировок.
__________________
Поймай яблоко 2! |
|
|||||
а вот та же задачка, но для картинок с пересекающимися ректанглами
как бы еще более бессмысленное дело в контексте спрайтшитов, но пусть тоже будет раз уж package { import flash.display.*; import flash.geom.*; public class Main extends Sprite { [Embed(source="test.png")] public static const test_png:Class; public function Main():void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var bmd:BitmapData = Bitmap(new test_png()).bitmapData; addChild(new Bitmap(bmd)); //разбиваем var arr:Array = splitBitmapByAlpha(bmd); // смотрим var tX:Number = bmd.width + 10; graphics.lineStyle(0, 0xC0C0C0); for (var i:int = 0; i < arr.length; i++) { var fragm:Bitmap = new Bitmap(arr[i]); addChild(fragm); fragm.x = tX; fragm.y = 10; tX += fragm.width + 10; graphics.drawRect(fragm.x, fragm.y, fragm.width, fragm.height); } } public static function splitBitmapByAlpha(bmd:BitmapData):Array /*BitmapData*/ { var res:Array = []; var w:int = bmd.width; var h:int = bmd.height; var k:int = 0; var p0:Point = new Point(); // карта непрозрачности var map:BitmapData = bmd.clone(); map.threshold(map, map.rect, p0, ">", 0, 0xFF000000, 0xFF000000); // пока битмап не пустой while (map.getColorBoundsRect(0xFF000000, 0x0, false).width) { // ищем следующую непрозрачную точку while (!map.getPixel32(k % w, k / w)) k++; // заливаем красным map.floodFill(k % w, k / w, 0xFFFF0000); // берем что залилось как маску var mask:BitmapData = new BitmapData(w, h, true, 0x0); mask.copyChannel(map, map.rect, p0, BitmapDataChannel.RED, BitmapDataChannel.ALPHA); // фрагмент var fragmRect:Rectangle = mask.getColorBoundsRect(0xFF000000, 0x0, false); var fragmBmd:BitmapData = new BitmapData(fragmRect.width, fragmRect.height, true, 0x0); // вынимаем по маске из основного fragmBmd.copyPixels(bmd, fragmRect, p0, mask , fragmRect.topLeft); // удаляем отработанный кусок map.threshold(mask, mask.rect, p0, "==", 0xFF000000, 0x0, 0xFF000000); mask.dispose(); res.push(fragmBmd); } map.dispose(); return res; } } } Последний раз редактировалось silin; 27.02.2014 в 21:41. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Мощно!
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 20:49. |
|
« Предыдущая тема | Следующая тема » |
Теги |
alpha , decomposition , spritesheet , разделение изображения , спрайтщит |
Опции темы | |
Опции просмотра | |
|
|