Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.05.25;
Скачать: [xml.tar.bz2];

Вниз

Ускорение свободного падения   Найти похожие ветки 

 
Света   (2013-08-05 17:50) [0]

полный код модуля

unit Main;

interface

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

type
 TMainForm = class(TForm)
   Shape: TShape;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   MMTimer: Integer;
   INTERVAL_MS: Integer;
   H: Double;
   SH,GSH: Double;
 end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

procedure MyTimerCallBackProg(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
begin
 MainForm.GSH := MainForm.GSH + MainForm.SH;
 MainForm.Shape.Top := MainForm.Shape.Top + Trunc(MainForm.GSH);

 if(MainForm.Shape.Top+MainForm.Shape.Height+100 > MainForm.ClientHeight) then
 MainForm.GSH := -MainForm.GSH;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
 DoubleBuffered := True;
 INTERVAL_MS := 100;
 //INTERVAL_MS := 50;
 //INTERVAL_MS := 10;
 H := 9.8;
 GSH := 0;
 SH := H/(1000/INTERVAL_MS); {пикселей в м/cек}
 MMTimer := timeSetEvent(INTERVAL_MS,1,@MyTimerCallBackProg,100,1);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
 timeKillEvent(MMTimer);
end;

end.


Вопрос: почему при разных INTERVAL_MS разная скорость, если SH := H/(1000/INTERVAL_MS); должна уравнивать ее.

при разных INTERVAL_MS должна меняться только частота перерисовки.


 
sniknik ©   (2013-08-05 18:17) [1]

что, не помог "точный таймер"?

может к советам из прошлой ветки прислушаешься все таки?


 
Света   (2013-08-05 18:21) [2]

Помог,
>>может к советам из прошлой ветки прислушаешься все таки?

Вопрос совершенно другой.


 
Сергей М. ©   (2013-08-05 21:22) [3]


> Света   (05.08.13 18:21) [2]


Обращения из дополнительных потоков к визуальным VCL-контролам, в частности и в первую очередь безоконным, не допустимы.


 
[ВладОшин] ©   (2013-08-06 00:01) [4]


> Вопрос: почему при разных INTERVAL_MS разная скорость



> SH := H/(1000/INTERVAL_MS); {


> MainForm.GSH := MainForm.GSH + MainForm.SH;
>  MainForm.Shape.Top := MainForm.Shape.Top + Trunc(MainForm.
> GSH);


 
[ВладОшин] ©   (2013-08-06 00:14) [5]

с увеличением времени увеличивается скорость
с увеличением скорости увеличивается пройденный путь за единицу времени

как-то так
var
 Form1: TForm1;
 dV: Double = 0;
 G: Double = 9.8;
 L: Double = 0;
 T: Double = 0;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 dV := dV + G*Timer1.Interval/1000;
 L := L + dV*Timer1.Interval/1000;
 Shape1.Top := Shape1.Top + Round(L);
end;


 
[ВладОшин] ©   (2013-08-06 00:37) [6]

обшибся :)

var
 Form1: TForm1;
 dV: Double = 0;
 G: Double = 9.8;
 L: Double = 0;
 T: Double = 0;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
 M: TLabel;
begin
 Timer1.Enabled := False;
 T := T + Timer1.Interval/1000;
 dV := dV + G*Timer1.Interval/1000;
 L :=  dV*T;
 Shape1.Top := Shape1.Top + Round(L);
 M := TLabel.Create(Self);
 M.Top := Shape1.Top;
 M.Caption := Format("%f sec - %f meter",[T, L]);
 InsertControl(M);
 Application.ProcessMessages;
 Sleep(100);
 RemoveControl(M);
 FreeAndNil(M);
 Timer1.Enabled := True;
end;


 
Sha ©   (2013-08-06 12:11) [7]


unit gt22Form;

interface

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

type
 TForm1 = class(TForm)
   Shape1: TShape;
   ApplicationEvents1: TApplicationEvents;
   CheckBox1: TCheckBox;
   procedure FormCreate(Sender: TObject);
   procedure CheckBox1Click(Sender: TObject);
   procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
 private
   Start: integer;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin;
 Shape1.Top:=0;
 end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin;
 if CheckBox1.Checked then begin;
   Shape1.Top:=0;
   Self.Start:=GetTickCount;
   end;
 end;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
const
 g=9.8;
var
 tick, delta, path: integer;
begin;
 Done:=not CheckBox1.Checked;
 if not Done then begin;
   tick:=GetTickCount;
   delta:=tick-Self.Start;
   path:=Trunc(g*delta*delta/2/4000);
   if path>=Self.ClientHeight-Shape1.Height then begin;
     Self.Start:=tick;
     path:=0;
     end;
   Shape1.Top:=path;
   end;
 end;

end.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2014.05.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
2-1375335686
Den
2013-08-01 09:41
2014.05.25
enumchildwindows вопрос по последнему параметру


2-1375798951
mfender
2013-08-06 18:22
2014.05.25
Появляются лишние символы при отправке TIdMultiPartFormDataStream


15-1385038996
bodygans
2013-11-21 17:03
2014.05.25
ПАТЕН


15-1384896605
Юрий
2013-11-20 01:30
2014.05.25
С днем рождения ! 20 ноября 2013 среда


3-1298639170
Очень злой
2011-02-25 16:06
2014.05.25
Проблема с запросом.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский