Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DoCollision B DelphiX [Delphi, DelphiX, Windows]


Страницы:   1 2 3 4 5 6 7 8 9 10

Аццкий_рыцарь:) ©   (2005-12-29 14:07:00) 

когда спрйт анимируется, то DoCollision происходит только на первом его кадре. А мне нужно что б на всех кадрах происходило колижн ХЕЛП!


antonn   (2006-01-17 17:05:00) [61]

ненадо ничего менять, канвас рулит:)
а вообще, нормальная ветка, почти по существу:)))


Аццкий_рыцарь:)   (2006-01-17 16:38:00) [62]

Извените, конечно за оффтоп... Но мне стало смешно, когда я посмотрев вновь на свою тему, и прочитав заново все посты тут :) начинали с Collision, а тут уже и канвас попер вовсю, и чего только нет! :)))  

Надобно бы модерам переименовать тему как -то типа : "обсуждение написания аркад" :)))


Cash   (2006-01-16 14:52:00) [63]

Аццкий_рыцарь:)   (16.01.06 09:08) [126]:
А зря! ;)
Сразу проглядываюся пробклы знаний от недочитанной (или недопонятой)
родной дельфийской справки! :) (эка я завернул :D )
Русский хелп весит 1.4 мега. Я попробую, но гарантировать не смогу.

В близжайшее время дам еще одну ссылку с webfile.


Аццкий_рыцарь:)   (2006-01-16 09:08:00) [64]

2Cash та у мну две книги по делфе:) одна 4 см толщиной, другая 6, но там как всегда нифига нужного нет :( Если можешь то кинь русскую справку, а то с буржуями не сильно дружу


Cash   (2006-01-15 16:48:00) [65]

А с другой стороны...., зачем мыло, на Help для DelphiX качай с WebFile:
http://webfile.ru/747112


Cash   (2006-01-15 16:35:00) [66]

antonn ©   (15.01.06 16:09) [122]:
Лады. уболтал... :)))

antonn ©   (15.01.06 16:14) [123]:
Прикольно. 8)

Тык шта Аццкий_рыцарь:), антохину процедуру на вооружение и
дай мыло, я туда флудону двумя хелп-файлами. :)))


antonn   (2006-01-15 16:14:00) [67]

хо-хо-хо, я выставил св-во браша канваса "приемника" в bsclear, и копирование стало "прозрачным", но и тормознутей:) теперь мой код в 4,39 раза быстрее:)))


antonn   (2006-01-15 16:09:00) [68]

Cash ©   (15.01.06 15:18) [121]
короче мне лень было эксперементировать, все равно мой код быстрее:)


Cash   (2006-01-15 15:18:00) [69]

Хм-м-м-м, BrushCopy копирует часть канвы с заменой указанного цвета.
Она не предпологает прозрачности, но помоему, ее можно реализовать
используя в качестве цвета-заменителя clNone.
Я не уверен только.


antonn   (2006-01-15 13:55:00) [70]

Cash ©   (15.01.06 13:47) [119]
Ну, а как можно ошибиться в одной процедуре? Все вроде нормально,
но тыж говорил о нарушении цвета (про белый фон). Я это имел в виду.

вот после приведенного кода (даже без цикла), вместо "прозрачного цвета" - белый фон.


Cash   (2006-01-15 13:47:00) [71]

antonn ©   (15.01.06 11:54) [118]:
... я старался:))) ...
Видел бы ты мой первый метод выравнивания текста.
Я щас этого прочитать не могу. Даже переформатировать на новый лад! :)

... где я неправильно испрользовал BrushCopy? ...
Ну, а как можно ошибиться в одной процедуре? Все вроде нормально,
но тыж говорил о нарушении цвета (про белый фон). Я это имел в виду.


antonn   (2006-01-15 11:54:00) [72]

Cash ©   (15.01.06 10:44) [115]
Эту процедуру сам писал?

угу:)
могу еще ужаснее показать:
http://kladovka.net.ru/index.cgi?pid=list&rid=252

> Форматирование текста ужасное.

я старался:)))
у меня поле с кодом не такое большое, чтобы размашисто писать, поэтому я привык писать сжато, мне то понятно:)

> Двойной, вложеный for это самоубийство в плане
>быстродействия.
> А в другом, пока я прознал про BrushCopy, делел именно
>так! ;)
> (только с заменой for на while)

это самоубийсво работает быстрее, у меня по крайней мере:)

Аццкий_рыцарь:)   (15.01.06 11:10) [116]
УЖОС! :) я пока разберусь с твоей процедурой, то мои волсы станут седые :)

:]

В общем так я сравнивал:
на форме 2 Timage, в одном картинка 128х128 с черным "прозрачным цветом", на другом другая картинка (около 300х200). Делал 3 вызова нижеприведенного кода, из них брал усредненное. Сначала с BrushCopy, потом CopyTransparentBrush (только без var в передаче параметров).

var
Divisor:Int64; T1:Int64; i,X,ii:integer; TotalTime :Extended; iii:integer;
begin
if QueryPerformanceFrequency(Divisor) then
begin
   QueryPerformanceCounter(T1);
   TotalTime := T1;

  for iii:=0 to 199 do
  // Image2.Picture.Bitmap.Canvas.BrushCopy( rect(0,0,Image1.Width,Image1.Height),Image1.Picture.Bitmap,rect(0,0,Image1.Width,Image1.Height),clblack ); //0.142
   CopyTransparentBrush( Image1.Picture.Bitmap,Image2.Picture.Bitmap,10,20,clblack ); //0,041
 
   QueryPerformanceCounter(T1);
   TotalTime:=(T1-TotalTime)/Divisor;
   caption:=floattostr(TotalTime);
end;


где я неправильно испрользовал BrushCopy?


Cash   (2006-01-15 11:31:00) [73]

Аццкий_рыцарь:)   (15.01.06 11:10) [116]:
Самое главное в нашем деле - не торопиться.
Торопишся, внимательнее изучай изложенную здесь информацию!
Пример из [97] и далее. Переделай его под себя.

Слушай, а мож я тебе дам русскую справку по Делфе,
недоделанная и для D4, но тебе поможет.
У меня еще есть англиская - по DelphiX, если шариш в
буржуйском, там все понятнее понятного написано.


Аццкий_рыцарь:)   (2006-01-15 11:10:00) [74]

antonn

УЖОС! :) я пока разберусь с твоей процедурой, то мои волсы станут седые :)

Cash

так как работает BrashCopy? и как сделать чтоб фон картинки мертвого монстра был прозрачным? и где ты показывал как записать битмап в буфер? :)


Cash   (2006-01-15 10:44:00) [75]

antonn ©   (15.01.06 09:40) [114]:
Whaaatsuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuup!!!!! :)))

antonn ©   (15.01.06 09:39) [113]:
Эту процедуру сам писал? Форматирование текста ужасное. :)
Переформатировав под сбя понял, что, наверное, ты всетаки
неправильно использовал BrushCopy.
Двойной, вложеный for это самоубийство в плане быстродействия.
А в другом, пока я прознал про BrushCopy, делел именно так! ;)
(только с заменой for на while)


antonn   (2006-01-15 09:40:00) [76]

да, забыл сказать:
канвас - рулез!

:)


antonn   (2006-01-15 09:39:00) [77]

Cash ©   (15.01.06 9:15) [112]
Хотя... есть BrushCopy.

забудь о BrushCopy:) А о Canvas.Draw() так тем более:))) Это же тормоза страшенные будут.
может я неправильно ее использовал, но у меня, при clblack "прозрачном цвете", битмап копировался с белым фоном. Единственное преимущество у этой функции - она может менять размер "выводного" битмапа, растягивая его, нпмр.
Вот, в 3,5 раза быстрее, чем BrushCopy(замерял через QueryPerformanceCounter после 1000 копирований битмапа 128х128):
_B_in - копируемый битмап,
_B_out - на который копируем,
_x,_y - координаты копирования копируемого (гы-гы-гы) битмапа,
trColor - прозрачный цвет.
procedure CopyTransparentBrush(var _B_in,_B_out:Tbitmap; _x,_y:integer; trColor:Tcolor);
const
 Pixels = MaxInt div SizeOf(TRGBTriple);
type
 PRGBArray = ^TRGBArray;
 TRGBArray = array[0..Pixels-1] of TRGBTriple;
var x, y, x_cor,y_cor,x_corS,y_corS: Integer; RowOut,RowIn: PRGBArray;
   rc1, bc1, gc1:byte;
begin
if (_x)>_B_out.Width-1 then exit; if (_x+_B_out.Width)<0 then exit;
if (_y)>_B_out.Height-1 then exit; if (_y+_B_out.Height)<0 then exit;
 _B_in.PixelFormat:=pf24bit; //убрать, если изначально этот формат
 _B_out.PixelFormat:=pf24bit;  //убрать, если изначально этот формат
 if _x<0 then x_corS:=abs(_x) else x_corS:=0;
 if _y<0 then y_corS:=abs(_y) else y_corS:=0;
 if (_x+_B_in.Width)>_B_out.Width then x_cor:=_x+_B_in.Width-_B_out.Width else x_cor:=0;
 if (_y+_B_in.Height)>_B_out.Height then y_cor:=_y+_B_in.Height-_B_out.Height else y_cor:=0;
 rc1:=GetRValue(trColor); gc1:=GetGValue(trColor); bc1:=GetBValue(trColor);
 for y:=y_corS to _B_in.Height-1-y_cor do begin
    RowOut:= _B_out.ScanLine[y+_y];
    RowIn:= _B_in.ScanLine[y];
   for x:=x_corS to _B_in.Width-1-x_cor do
    if not((RowIn[x].rgbtRed=rc1)and(RowIn[x].rgbtGreen=gc1)and(RowIn[x].rgbtBlue=bc1)) then begin
         RowOut[x+_x]:=RowIn[x];
   end;
 end
end;


Cash   (2006-01-15 09:15:00) [78]

Аццкий_рыцарь:)   (14.01.06 23:23) [109]:
ыыыыы.... :)))
Конечно рисует, но вот зря ты бэкграунду размеры меняешь!
Их же менять надо, когда утебя картинка новая.
А на бэкграунде у тебя уже есть картинка, и должна она,
по моему, быть большой. И размеры бэкграунда вроде должны
быть под размер экрана.

antonn ©   (15.01.06 06:10) [111]:
Выкладывай!
Хотя... есть BrushCopy. Аццкий_рыцарь:), посмотри в хелпе по этой
процедуре.
TCanvas.BrushCopy(<...>)

Аццкий_рыцарь:)   (15.01.06 00:41) [110]:
Не майся ты с DxDIB, это лаг. делай все манипуляции из буфера-битмапа.
Этож проще, и я показал уже как.

Еще одно замечание: зачем тебе form1 в обработчике класса TForm1???
Если ты создашь два объекта класса TForm1, то они не будут работать!
Потаму, что ты обращаешся не к свойствам класса, а к свойствам внешнего
объекта этого класса. Проше говоря, все законы действуют только для
Form1: TForm1.
Обращайся напрямую из обработчика к свойствам класса, или, если не
помниш что да как то, используй Self для переходов по адресам.


procedure TForm1.Button1Click(Sender: TObject);
var P: TBITMAP;
begin
 p:= DXImageList1.Items.Items[3].Picture.bitmap; /// Look here
 with P do begin
   Width := 77;
   Height := 77;
   Canvas.Brush.Color := clBlack;
   Canvas.Pen.Color := clRed;
   canvas.Draw(0,0,dxdib1.DIB);
 end;
 Self.DXImageList1.Items.Items[3].Restore; /// Look here
end;


antonn   (2006-01-15 06:10:00) [79]

если нужно скопировать битмап на битмап(не на канвас) с "прозрачным цветом", могу дать процедурку, она побыстрее, чем canvas.Draw()


Аццкий_рыцарь:)   (2006-01-15 00:41:00) [80]

и еще...

мне надо чтоб фон у картинки был прозрачным, но у dxdib есть только transparent, a transparent color нету :( я пытался вместо canvas.Draw(0,0,dxdib1.DIB) ставить canvas.Draw(0,0,form1.DXImageList1.Items.Items[4].Picture.bitmap)  (в DXImageList1.Items.Items[4] я посавил такую же картинку как и в dib1 ) но рисуется вместо монстра белый квадра :( блин !что тут не так?


Страницы:   1 2 3 4 5 6 7 8 9 10

Наверх

Титульная страница Поиск, карта сайта Написать письмо