Показать сообщение отдельно
  #3  
Старый 22.12.2010, 17:38
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
const
  wi = 700;
  he = 500;
  mb = 49;

type
  ABitMap = array [0 .. mb] of TBitMap;

var
  a: ABitMap;
  i, o: integer;
  h: hwnd;
  dc: hdc;
  t: integer;
  k: integer;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  h := FindWindow(nil, 'Окно игры');
  if h = 0 then
  begin
    showmessage('Не найдено окно игры');
    halt;
  end;
  dc:=GetDC(0); // раньше стояло GetDC(h);
  for i := 0 to mb do
  begin
    a[i] := TBitMap.Create;
    a[i].Width := wi;
    a[i].Height := he;
  end;
  i := 0;
  o := 0;
  t := 0;
  k := 0;
  tmPaint.Interval := 50; // тут пробовал разные значения от 50 до 2 мс, ниче не спасает
end;

procedure Tform1.tmPaintTimer(Sender: TObject);
begin
  tmPaint.Enabled := false;
  BitBLT(a[i].Canvas.Handle, 0, 0, wi, he, dc, 0, 0, SRCCOPY);
  inc(i);
  if i > mb then
    i := 0;
  if t < 2 then
    inc(t)
  else
  begin
    BitBLT(Canvas.Handle, 0, 0, wi, he, a[o].Canvas.Handle, 0, 0, SRCCOPY);
    inc(o);
    if o > mb then
      o := 0;
  end;
  inc(k);
  tmPaint.Enabled := true;
end;

procedure TForm1.tmFPSTimer(Sender: TObject);
begin
  Edit1.Text := inttostr(k);
  k := 0;
end;
Переменная K показывает FPS. I и O соответственно индексы входа и выхода. A - буфер-очередь. T реализует задержку в 2 кадра (в тестовом режиме, из-за тормозов это примерно 0.3 сек).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием