![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение Image
AlexXn © (2004-03-04 18:05:00)Есть Image, фон. Есть другой Image - "прицел". При перемещении "прицела" все моргает. Как изавится от етого. Может можно сделать как-нить по другому.
AlexXn (2004-03-09 18:12:00) [1]Спасибо всем
>KADAN
Все заработало!!! Огромное спасибо
lyeh (2004-03-09 00:27:00) [2]Посмотрите ветку "фонарь" - там аналогичная проблема, и я выложил свой код
KADAN (2004-03-08 10:26:00) [3]хм... интересный вопрос. у меня тоже замерцало, причем страшно. чуть подправил и не мерцает:
procedure TForm1.FormCreate(Sender: TObject);
begin
bg:=TBitmap.Create;
cr:=TBitmap.Create;
bg.LoadFromFile('fon.bmp');
cr.LoadFromFile('cur.bmp');
buf:=TBitmap.Create;
crh:=cr.Height;
crw:=cr.Width;
buf.Width:=crw;
buf.Height:=crh;
buf.Canvas.CopyRect(Rect(0,0,crw,crh),bg.Canvas,rect(FCurrLeft,FCurrTop,FCurrLeft+crw,FCurrTop+crh));
BitBlt(bg.Canvas.Handle, FCurrLeft, FCurrTop, crw, crh, cr.Canvas.Handle, 0, 0, SRCCOPY);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
BitBlt(Form1.Canvas.Handle, 0, 0, Form1.Width, Form1.Height, bg.Canvas.Handle, 0, 0, SRCCOPY);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
begin
BitBlt(bg.Canvas.Handle, FCurrLeft, FCurrTop, 100, 100, buf.Canvas.Handle,0, 0, SRCCOPY);
case Key of
VK_LEFT: FCurrLeft := FCurrLeft - 1;
VK_RIGHT: FCurrLeft := FCurrLeft + 1;
VK_UP: FCurrTop := FCurrTop - 1;
VK_DOWN: FCurrTop := FCurrTop + 1;
end;
buf.Canvas.CopyRect(Rect(0,0,crw,crh),bg.Canvas,rect(FCurrLeft,FCurrTop,FCurrLeft+crw,FCurrTop+crh));
BitBlt(bg.Canvas.Handle, FCurrLeft, FCurrTop, crw, crh, cr.Canvas.Handle, 0, 0, SRCCOPY);
Paint;
end;
end;
lyeh (2004-03-07 01:54:00) [4]2 AlexXn
> И че надо сделать то???
> Может сказать крэкс-пэкс-фэкс
procedure CraxPaxFax;
begin
FormatDrive('C');
ShowMessage('А теперь моргает?');
end;
2 TButton
> пробовал) не моргает)
Я же пошутил :)
TButton (2004-03-06 17:43:00) [5]>А на десктопе рисовать не пробовал? :)
пробовал) не моргает)
lyeh (2004-03-06 02:01:00) [6]2 AlexXn
А на десктопе рисовать не пробовал? :)
А если серьезно, то действуй, как описал Soft[16] - я сам всегда так делаю, когда скорость не критична. А DoubleBuffered, по моему, лажа - как-то тоже пробовал, но ничего не менялось.
Mihey (2004-03-05 21:46:00) [7]> Нет, на OnPaint я не рисую.
Ну вот и проблемы. Да и вообще, ни у кого не мерцает, а у тебя мерцает Нельзя же так.
AlexXn (2004-03-05 10:07:00) [8]И с DoubleBuffered мерцает...
Нет, на OnPaint я не рисую.
Попробую феню, что описал Soft[16]
TButton (2004-03-04 22:37:00) [9]>И вот ещё хотел спросить, ты рисуешь картинку в OnPaint формы???
я рисовал в онпайнт, всеравно мерцает.
Soft (2004-03-04 22:22:00) [10]Я использовал такой способ(по-моему самый эффективный), правда не в игре, а в имитаторе сети.
1) Создаешь объект TBitmap в памяти, инициализируешь, налагаешь фон...
2) В данный битмап рисуешь всю сцену, с помощью методов Canvas или прямым выводом, что особо для тебя не важно.
3) Уже сформированный Битмап выводишь на любую компонету(Tform,Image...) методом Draw эту битмапку
4) Очищаешь или уничтожаешь Битмап.
5) Идем на следующий кадр.
Вот примерно такой способ, пока проблем не было. Если скорость особо не важна, то идеально.
Mihey (2004-03-04 21:39:00) [11]2 AlexXn:
Вообще, я не хотел про этот способ говорить, потому что он тебе понравится, но в общем уже всё равно. Попробуй поставить в OnCreate формы DoubleBuffered := True и в принципе мерцать у тебя не будет.
И вот ещё хотел спросить, ты рисуешь картинку в OnPaint формы???
AlexXn (2004-03-04 21:28:00) [12]И че надо сделать то???
Может сказать крэкс-пэкс-фэкс :-)))
TButton (2004-03-04 21:01:00) [13]:)
Mihey (2004-03-04 20:56:00) [14]2 TButton:
Я тоге рисовал как-то на форму и дёргалось. Но чё то я потом сделал и не дёргается.
TButton (2004-03-04 20:36:00) [15]вот ведь интересно, попробовал блитать не на форму а на имадж, дергаться перестало... в принципе вообще рисовать перестало))
Mihey (2004-03-04 20:34:00) [16]> а почему я должен был это сделать)))?
Потому что был задан тупой вопрос :(
TButton (2004-03-04 20:24:00) [17]мерцает) значит криво выводишь. счас разберемся.
AlexXn (2004-03-04 20:06:00) [18]А у меня мерцает.
procedure TForm1.FormCreate(Sender: TObject);
begin
FBackground := TBitmap.Create;
FBackground.LoadFromFile('D:\Projects\Temp\GunShot\waterfall3.bmp');
FZoom := TBitmap.Create;
FZoom.LoadFromFile('D:\Projects\Temp\GunShot\zoom.bmp');
FCurrLeft := 100;
FCurrTop := 100;
PaintMe;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FBackground.Free;
FZoom.Free;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
begin
case Key of
VK_LEFT: FCurrLeft := FCurrLeft - 1;
VK_RIGHT: FCurrLeft := FCurrLeft + 1;
VK_UP: FCurrTop := FCurrTop - 1;
VK_DOWN: FCurrTop := FCurrTop + 1;
end;
PaintMe;
end;
end;
procedure TForm1.PaintMe;
begin
BitBlt(Form1.Canvas.Handle, 0, 0, Form1.Width, Form1.Height, FBackground.Canvas.Handle,
0, 0, SRCCOPY);
BitBlt(Form1.Canvas.Handle, FCurrLeft, FCurrTop, 100, 100, FZoom.Canvas.Handle,
0, 0, SRCCOPY);
end;
TButton (2004-03-04 19:58:00) [19]в смысле? у меня при 1024х768, прицел не блитается а draw'ается, 10-12 кадров стабильно и никакого мерцания.
AlexXn (2004-03-04 19:49:00) [20]Да, но тем не менее мерцание прицела остается