![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DoCollision B DelphiX [Delphi, DelphiX, Windows]
Аццкий_рыцарь:) © (2005-12-29 14:07:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10 >
когда спрйт анимируется, то DoCollision происходит только на первом его кадре. А мне нужно что б на всех кадрах происходило колижн ХЕЛП!
Аццкий_рыцарь:) (2006-01-18 13:53:00) [41]ЕЩЕ БУДУТ! :)
Cash (2006-01-18 13:51:00) [42]Аццкий_рыцарь:) (18.01.06 13:48) [147]:
А... я уже и со счета сбился :)))
Если вопросы будут, задавай!
Аццкий_рыцарь:) (2006-01-18 13:48:00) [43]я так и сделал :) все, тормозов нет :) БОЛЬШОЕ СПАСИБО Cash and antonn :)
сколько раз я вам говорил спасибо ? :) аа, ща буду в игру воплощать это все! седня че-то прорвало писать её :))))
Cash (2006-01-18 13:43:00) [44]Аццкий_рыцарь:) (18.01.06 13:36) [145]:
А я тебе давно уже говорил, типа монстряк твой кгда умирая отрисовывает
свой последний кадр. Тебе на этот случай надо поставить условие, мол
если у монстра AnimIndex равен AnimCount тогда монстру Visible в false и
запустить эту процедуру для отрисовки этого монстра по его координатам.
Только один раз!!! за смерть одного монстра, иначе тормазить будеееет!!!
Толпа сдохнет, да тормоза будут, но это должно быть не слишком долго.
Кадр или два, потом FPS восстанавливается.
Аццкий_рыцарь:) (2006-01-18 13:36:00) [45]Так я ж хочу, чтоб мертвого монстра там прорисовать :)
а когда их толпа умирает... :(
Cash (2006-01-18 13:34:00) [46]Аццкий_рыцарь:) (18.01.06 13:30) [143]:
А ты что, на каждом кадре ее вызываешь???? *)
Эта вещь вызываться должна только один раз, только тогда,
когда приспичило чёнить порисовать на бэк-е.
Аццкий_рыцарь:) (2006-01-18 13:30:00) [47]О! рисует, сволочь :)
но, блин, внатуре, тормозит :(
а нельзя что б без тормозов? ты вспомни про битву за производительность выше в этой теме :)
вообще-то, когда я рисовал из dxDIB, то там графа хранится в как TGraphic...
можно как-то с этим сделать и чтоб без глюков?
Cash (2006-01-18 13:26:00) [48]Cash © (18.01.06 13:24) [140]
Аццкий_рыцарь:) (18.01.06 13:24) [141]
Они бы еще сотые доли выводилиб!
:D :D :D :D :D :D :D :D :D :D :D :D :D
Cash (2006-01-18 13:24:00) [49]Забыл!!!
Найди те места, где задаются размеры картинок и поправь их для себя.
Первое - это там, где задается b - рамка, куда рисовать.
Второе - смени индексы картинок в DXImageList,
с моих (0 - бэкграунд, 1 - труп) на свои.
Аццкий_рыцарь:) (2006-01-18 13:24:00) [50]я, конечно не любитль copy->paste :) но этот код у меня нет желания сидеть и разбирать :)) так что... copy->paste->смотрим, что вышло :)
Cash (2006-01-18 13:17:00) [51]Аццкий_рыцарь:) (18.01.06 11:18) [138]:
А-а-а-а-а-Р-р-р-р-р-р-р-р-р-р-р-р.... Как же я всетаки ненавижу
DephiX! Блин, ну какой нормальный человек будет орудовать с объектом
TGraphic???! Там же все через эту самую .... TGraphics и делается!
8( 8( 8( 8(
Вот, что мне удалось поправить, выводит на 100%!
procedure TForm1.Button1Click(Sender: TObject);
var
p,a: TBitMap; //два буфера - бэк и то, что на бэк выводится
r: TGraphic; // руки бы ему оторвать - это то, куда рисовать будем
t: TColor; // цвет, которые прозрачный для 'a' картинки
b: TRect; // рамка, куда будем рисовать
begin
p := TBitMap.Create;
a := TBitMap.Create;
r := DXImageList.Items.Items[0].Picture.Graphic; // определяем, куда потом рисовать
// Задаем размеры буферов (опашливать не сметь! :))
p.Width := r.Width;
p.Height := r.Height;
p.Canvas.Draw(0,0,r);
with a do begin
Width := DXImageList.Items.Items[1].Picture.Graphic.Width;
Height := DXImageList.Items.Items[1].Picture.Graphic.Height;
Canvas.Draw(0,0,DXImageList.Items.Items[1].Picture.Graphic);
end;
// узнаем, какой цвет у нас - transparent
t := DXImageList.Items.Items[1].TransparentColor;
// делаем рамочку, куда рисовать
b := bounds(10,10,32,32);
// говорим, что transparent будет не рисоваться
with p.Canvas do begin
Brush.Style := bsClear;
end;
// и наконец, рисуем картинку
p.Canvas.BrushCopy(b,a,a.Canvas.ClipRect,t);
// после чего, передаем ее в результат
r.Assign(p);
// и обновляем текстуру
DXImageList.Items.Items[0].Restore;
// надо не забыть уничтожить буферы
a.Free;
p.Free;
end;
код грамоздкий и медленный, поэтому часто его вызывать нельзя.
Аццкий_рыцарь:) (2006-01-18 11:18:00) [52]Я вставил твой код и после нажатия на кнопку фон просто пропадает и стает черным :((
Cash (2006-01-18 11:04:00) [53]Аццкий_рыцарь:) (18.01.06 00:39) [133]:
ы-ы-ы-ы-ы-ы-ы-ы-ы-ы... :)))
Что я тут увидел.... :)
...vas.BrushCopy(p.Canvas.ClipRect,a,a.Canvas.ClipRect,clWhite );
Практически ты заменяешь весь бэкграунд на картинку из 'a'!
...opy(p.Canvas.ClipRect,a...
Это не верно, тебе надо взять так:
Bounds(x,y,a.Width,a.Height)
Это означает, что ты вставляешь картинку с исходными размерами и по
координатам X и Y.
После этой замены должен появляться белый прямоугольник по тем самым
координатам.
гы-гы-гы-гы-гы-гы-гы..., а что я еще увидел!!! 8)
with P do begin
Width := 77;
Height := 77;
Canvas.Brush.Color := clBlack;
Canvas.Pen.Color := clRed;
canvas.BrushCopy(p.Canvas.ClipRect,a,a.Canvas.ClipRect,clWhite );
end;
Это ты чтож делаешь то??? 8)
- Береш свой бэкграунд, и внаглую меняешь ему размеры! 8)
Именно по этому бэкграунд у тебя и становится размером 77х77.
У тебяж картинка бэкграунда есть, и рисуется! Дак оставь ее размеры
в покое (Тобиш, картинка уже инициализирована и второй раз это
делать уже не стоит, графику потеряешь)! :)
А вот насчет кисти и ручки - цвета им лучше поставить в clNone,
чтоб лишних всяких штучек не рисовать.
Посмотри сюда:
procedure TForm1.Button1Click(Sender: TObject);
var
P,a: TBITMAP;
tc: TColor; // <---=
br: TRect; // <---=
begin
a:= DXImageList1.Items.Items[4].Picture.bitmap;
p:= DXImageList1.Items.Items[3].Picture.bitmap;
tc := DXImageList1.Items.Items[4].TransparentColor; // <---=
br := Bounds(82,50,a.Width,a.Height); // <---=
with P do begin
Canvas.Brush.Color := clNone; // <---=
Canvas.Pen.Color := clNone; // <---=
Canvas.Brush.Style:=bsClear; // <---=
Canvas.BrushCopy(br,a,a.Canvas.ClipRect,tc); // <---=
end;
form1.DXImageList1.Items.Items[3].Restore; // <---=
end;
Символом // <---= я показал, что я изменил.
(Вот если бы товарищи дизайнеры форума поставилиб тегу code шрифт
'Courier New' с 10-м размером, я думаю код выглядел бы более внятно.)
Cash (2006-01-18 10:30:00) [54]Аццкий_рыцарь:) (18.01.06 09:55) [135]:
А ты у бэкграунда выставил этот атрибут?
В [123] (проикольный номер 8)) antonn написал, что поставил его у
приемника (у бэкграунда тобиш).
Аццкий_рыцарь:) (2006-01-18 09:55:00) [55]canvas.brush.style:=bsclear;
непомогло :(
я, конечно, понимаю что канвас рулит, но меня он скоро до смерти зарулит :)
antonn (2006-01-18 05:33:00) [56]Аццкий_рыцарь:) (18.01.06 0:39) [133]
что я выставил в Brush Copy, там хоть какой не напиши всеравно белым стает)
перед отрисовкой делай у нужного канваса canvas.brush.style:=bsclear;
Аццкий_рыцарь:) (2006-01-18 00:39:00) [57]Вот что у меня вышло (вернее не вышло) :
DXImageList1.Items.Items[4].Picture.bitmap - монстр
DXImageList1.Items.Items[3].Picture.bitmap - бэкграунд
procedure TForm1.Button1Click(Sender: TObject);
var P,a: TBITMAP;
begin
a:= DXImageList1.Items.Items[4].Picture.bitmap;
p:= DXImageList1.Items.Items[3].Picture.bitmap;
with P do begin
Width := 77;
Height := 77;
Canvas.Brush.Color := clBlack;
Canvas.Pen.Color := clRed;
canvas.BrushCopy(p.Canvas.ClipRect,a,a.Canvas.ClipRect,clWhite );
end;
form1.DXImageList1.Items.Items[4].Restore;
form1.DXImageList1.Items.Items[3].Restore;
end;
когда нажимаю кнопку, то бэкграунд исчезает, а в левом верхнем углу появляется квадрат 77 х 77 белого света (это не тот белый что я выставил в Brush Copy, там хоть какой не напиши всеравно белым стает)
что я тут не так делаю? пробовал убырать строку form1.DXImageList1.Items.Items[4].Restore; - ВАЩЕ НИКАКОГО ЭФФЕКТА :(
Аццкий_рыцарь:) (2006-01-17 23:49:00) [58]ээээ давайте вернемся к нашим (вернее моим) баранам :) что нужно писать в brushcopy??? вот что пишется про него :
canvas.brushcopy(const Dest : TRect; Bitmap : TBitmap ; const source : TRect; color: TColor );
1) const Dest : TRect - (Dest мне кажется это от английского "Destination", тоесть "пункт назначения") наверное сдесь надо показать в какой прямоугольник копировать, но почему-то, когда я там пишу form1.DXImageList1.Items.Items[3].Picture.bitmap (это бекграунд), то пишет:[Error] Unit1.pas(240): Incompatible types: 'TRect' and 'TBitmap' . а как мне превратить TBitmap B TRect ??
2) Bitmap: TBitmap - это я ваще непонимаю что такое О_о
3) const source: TRect - ( "source" это на буржуйском "источник") это наверное типа в какой прямоугольник копировать всю бадягу, но пишет тоже что типы несовместимы :( тоже незнаю как превратить TBitmap B TRect :(
4) color: TColor - ну, я кажись понял, что это transparent color
снова прошу вашей помощи :)
antonn (2006-01-17 17:21:00) [59]зачем в блокнот, можно в хтмл, там форматирование лучше (а вообще у меня в клиенте она, поэтому пофиг:))
Аццкий_рыцарь:) (2006-01-17 17:18:00) [60]Эту ветку можно скопировать в блокнот и назвать FAQ по DelphiX :)