Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Движение без мерцания

25K
10 августа 2007 года
KAMASUTR
8 / / 08.08.2007
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

TGameRead=class(TThread) // класс для таймера игры
  private
  protected
  procedure Execute;override; // Запуск
  procedure Tic;              // Один тик программы
  end;

var
  Form1: TForm1;
  Wizard,// Спрайт
  Buffer,// Буфер
  Flur:Tbitmap;// фоновый рисунок
  WizardX,WizardY:integer; // начальные координаты волшебника
  T1:TGameRead; //
  G:integer;
implementation
uses gfxutil;
{$R *.DFM}

procedure TGameRead.execute;
begin
repeat
      synchronize(Tic);
      until Terminated
end;

procedure TGameRead.Tic;
begin
// Тут пишем все как в TTimer OnTime

BitBlt(Buffer.Canvas.Handle,0,0,320,320,Flur.Canvas.Handle,0,0,SRCCOPY);
DrawBitmapTransparent(Buffer.Canvas,WizardX,WizardY,Wizard,clred);
BitBlt(Form1.Canvas.Handle,20,20,320,320,Buffer.Canvas.Handle,0,0,SRCCOPY);
Inc(G);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// Создаем спрайт
Wizard:=Tbitmap.Create;
Wizard.Loadfromfile('spr1.bmp');
// Создаем подложку
Flur:=Tbitmap.Create;
Flur.Loadfromfile('flur.bmp');
// и буфер
Buffer:=Tbitmap.Create;
Buffer.Height:=320; // у буфера нужно задать размер
Buffer.Width:=320;
// начальные координаты
WizardX:=135;
WizardY:=135;
T1:=TGameRead.Create(false); // Создаем поток
T1.Priority:=TpHighest;      // Ставим приоритет
G:=0;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
WizardY:=Y;
WizardX:=X;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
T1.Suspend;// Приостановим
T1.Free; // и прибем
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.caption:='FPS :'+IntToStr(G);
G:=0;

end;

end.

вот есть такой код , который рисует движение без мерцания, нг проблема! На старых машинах (Мегагерцев эдак 300) все идет норм (ФПС 100) но на машинах с скоростью 1700 оно жостко тормозит и выводит 24364 ФПС!:)
Вот братья хочу что-бы помогли приструнить супостата!!

[color=red]Применяй для оформления кода специальные теги. Модератор.[/color]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог