Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > работа со спрайтами


Автор: СЭНСЭЙ 30.4.2009, 13:43
Наткнулся в инете на такой сайт по работе со спрайтами:
http://www.codenet.ru/progr/delphi/sprites/
вобщем ключевой код, которым я воспользовался такой:
Код

var
Wizard, WizardMask,Buffer:Tbitmap;
X,Y:integer;
...
Wizard:=Tbitmap.Create;
Wizard.Loadfromfile('spr1.bmp');
WizardMask:=Tbitmap.Create;
WizardMask.Loadfromfile('spr2.bmp');
// Копируем маску в буфер BitBlt(Buffer.Canvas.Handle,X,Y,50,50,
Buffer:=Tbitmap.Create; :

WizardMask.Canvas.Handle,0,0,SrcPaint);
// Копируем спрайт в буфер
BitBlt(Buffer.Canvas.Handle,X,Y,50,50, Wizard.Canvas.Handle,0,0,SrcAnd);
...
// Перемещаем буфер на форму BitBlt(Form1.Canvas.Handle,0,0,320,240,
// Buffer.Canvas.Handle,0,0,SrcCopy);


мне не понятно одно - зачем копировать маску?
ведь все равно изображение спрайта на белом фоне копирутся на фон без белых пикселей?

Автор: ~FoX~ 2.5.2009, 09:38
СЭНСЭЙ, Читаем про битовые операции.......
Есть некий ДЦ, предположим он с собственным фоном...., есть изображение бублика, и ты хочешь нарисовать его с дыркой по середине на фоне этого самого ДЦ.....что бы вычислить где действительно есть дырка используется "маска", все чо не есть прозрачным на маске обозначается как занятый бит...Т.е. черный....в зависимости от того какие операции (or, xor, and, etc...) ты производишь с ДЦ, изображением и маской, получаешь разные эффекты - дырку в бублике, бублик вокруг дырки или таблетку, которая на самом деле дырка....

если есть желание разобраться подробнее долби в аську 175122537....буквально месяца три назад писал клиенту "помощника" для проекта....

Автор: AntonN 2.5.2009, 22:19
имхо, приведенный выше способ не есть подходящий для игр, совершенно. Приблизительно при той же скорости можно выводить попиксельно через сканлайн с битмапа на битмап, при любом "прозрачном" цвете, при этом прикрутить свои эффекты (например полупрозрачный спрайт с "прозрачным" светом).
как пример могу предложить пару игрушек отсюда (Star Scroller, Battle Scroller и Defence II):
http://desksoft.ru/index.php?files&id=3&owner=3

Автор: ~FoX~ 3.5.2009, 08:25
AntonN, А он про игры и не говорил ничего, а если уж разговор про игры зашел, то GDI+ в руки и писать.....А еще лучше OpenGL или DX

Автор: AntonN 3.5.2009, 21:41
~FoX~, статью видел?
если дело дошло, можно и без GDI+.
для большинства простых 2d игр достаточно ГДИ, DX и OGL не нужен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)