Пятница, 17.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Графика » Игры

Изменение гаммы спрайта

Для чего это нужно. Эту технологию можно использовать для выделения "юнита", или для выделения пункта меню. Одним словом для обозначения чего-либо.
Ну что не поняли? Показываю:


стандартный спрайт : спрайт с измененной гаммой

Как это делатся. Динамически создается новый спрайт с подложкой нужного цвета (фон) и на него накладывается с использованием Альфа смешения наш спрайт. Чем больше величина Альфа, тем больше будет "проявляться" фон, соответственно, если "фон" белый - спрайт будет осветляться.
Что касается TransparentColor - если фоновый цвет спрайта будет отличаться от "подложки" создаваемого спрайта, то придется подумать как определить новый TransparentColor. Можно конечно заранее его просчитать и использовать, а можно просчитать динамически, взяв, например, цвет фоновой точки (посмотрите координаты какой нибудь из них в редакторе) в полученном спрайте.

Посмотрим на примере.
Эта процедурка реализует алгоритм описанный выше.

procedure Tform1.createmmap(Color:Tcolor;alpha:byte);
var
 NG : TDIB;
 Item: TPictureCollectionItem;
 tm:Tdirectdrawsurface;
 i:integer;
 est:boolean; //Присутствует ли уже измененная картика в списке
 TC:TColor; //TransparentColor
begin
 ng:=tdib.Create; //Создаем картинку (пустую)
 tm:=Tdirectdrawsurface.Create(DXDraw.Surface.DDraw); //Создаем поверхность
 tm.SystemMemory:=false;
 tm.SetSize(il.Items[0].Width,il.Items[0].height); //Устанавливаем размер поверхности по размеру исходной картинки
 tm.Fill(color); //Заполняем фон нужным цветом
 il.Items[0].DrawAlpha(tm,bounds(0,0,il.Items[0].width,il.Items[0].height),0,alpha); //Рисуем исходную картинку на фон с прозрачностью
 tm.AssignTo(ng); //Сохраняем изображение в картинку (создана первой строкой)
 tm.Free; //Очищаем память от поверхности
 TC:=ng.Canvas.Pixels[0,0]; //Возьмем цвет точки 0,0 в качестве TransparentColor для нового спрайта
 est:=false; //Ставим на нет, то что картинка уже есть в списке
 for i:=0 to il.Items.Count-1 do //Если же она есть
 if il.Items[i].Name='MMG' then est:=true; //ТО Ставим на Да
 if est then //Если ДА то
 begin //Изменяем уже существующую картинку
 item:=il.Items.Find('MMG');
 item.Picture.Graphic := ng;
 item.TransparentColor:=TC;
 item.Transparent:=true;
 item.Restore;
 end
 else
 begin //Если же Нет, то заносим в список новую!
 Item := TPictureCollectionItem.Create(IL.Items);
 Item.Name:='MMG';
 Item.SystemMemory:=false;
 Item.Picture.Graphic := ng;
 Item.TransparentColor:=TC;
 Item.Transparent:=true;
 Item.Restore;
 end;
end;

Получить ссылку на материал

Категория: Игры | Добавил: Барон (08.12.2011)
Просмотров: 661 | Теги: спрайт, Гамма | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
DirectX [17]
OpenGL [2]
Игры [15]
Разные [28]
Королевство Delphi © 2010-2024
Яндекс цитирования