
22.12.2010, 17:38
|
 |
Профессионал
|
|
Регистрация: 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.
|