Пишу код, чтоб прорисовывал падение с подскоком мячика (прорисовка в процедуре Cloud), но вместо каждого этапа прорисовки, он вырисовывает только первое и конечное положение.
procedure TForm1.Timer2Timer(Sender: TObject); var n,i:integer; begin i:=V; while i<ClientHeight-22 do begin if y0<=ClientHeight-22 then for y0 := y0 to ClientHeight-22 do begin // y0:=y0+5; Cloud(x0,y0,clBlack); end; i:=i+((ClientHeight-i) div 3); if y0>=i then for Y0 := Y0 DownTo i do begin // y0:=y0-5{- sqr(n)}; x0:=x0+1; Cloud(x0,y0,clBlack); end; end; Timer2.Enabled:=False; end;
procedure TForm1.Cloud(x, y: Integer; ColorCloud: TColor); begin with Image1.Canvas do begin FillRect(Rect(0,0,Width,Height)); Ellipse(x0-22,y0-22,x0+22,y0+22); end; end;
А зачем вы все рисование впихнули в таймер в т. ч. циклы? Вам в таймере нужно 3 действия: проверить не достигнут ли край и если да то изменить флаг направления движения сместить мяч перерисовать мяч. ВСЕ.
procedure TForm1.Timer2Timer(Sender: TObject);
var n,i:integer;
begin
i:=V;
while i<ClientHeight-22 do
begin
if y0<=ClientHeight-22 then
for y0 := y0 to ClientHeight-22 do
begin
// y0:=y0+5;
Cloud(x0,y0,clBlack);
end;
i:=i+((ClientHeight-i) div 3);
if y0>=i then
for Y0 := Y0 DownTo i do
begin
// y0:=y0-5{- sqr(n)};
x0:=x0+1;
Cloud(x0,y0,clBlack);
end;
end;
Timer2.Enabled:=False;
end;
procedure TForm1.Cloud(x, y: Integer; ColorCloud: TColor);
begin
with Image1.Canvas do begin
FillRect(Rect(0,0,Width,Height));
Ellipse(x0-22,y0-22,x0+22,y0+22);
end;
end;