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

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

Перемещение Image


Страницы:   1 2

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]

Да, но тем не менее мерцание прицела остается


Страницы:   1 2

Наверх

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