![]() |
|
|
#1
|
|||
|
|||
![]() Нашел пример, то что мне нужно, но не знаю как избавиться от мерцания в анимации(( Подскажите как?Если ставить значение таймера низким то это очень заметно(
Вот код: Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin if (pig1=false) and (pig2=false) and (pig3=false) and (pig4=false) and (pig5=false) and (pig6=false) and (pig7=false) then begin image1.Picture.LoadFromFile('1.jpg'); pig1:=true; end else if (pig1=true) and (pig2=false) and (pig3=false) and (pig4=false) and (pig5=false) and (pig6=false) and (pig7=false) then begin image1.Picture.LoadFromFile('2.jpg'); pig1:=false; pig2:=true; end "I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." |
#2
|
||||
|
||||
![]() 1. Заведите приватный массив:
Код:
Jpg: Array[0..1] of TJpegImage; Код:
Jpg[0] := TJpegImage.Create; Jpg[0].LoadFromFile('1.JPG'); Jpg[1] := TJpegImage.Create; Jpg[1].LoadFromFile('2.JPG'); Код:
if not pig1 and not pig2 and not pig3 and not pig4 and not pig5 and not pig6 and not pig7 then begin image1.Picture.Assign(Jpg[0]); pig1 := true; end else if pig1 and not pig2 and not pig3 and not pig4 and not pig5 and not pig6 and not pig7 then begin image1.Picture.Assign(Jpg[1]); pig1 := false; pig2 := true; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Вообще для анимации ни TImage, ни TTimer не подходят, я бы на твоем месте выбрал бы как минимум вместо TImage - TPaintBox, а вместо таймера использовал бы обычный цикл, вот пример данной реализации:
Код:
type TPigs = array of TJpegImage; //проолжаю идею Страдальца) TForm1 = class(TForm) Button1: TButton; //кнопка старта и остановки анимации анимации PaintBox1: TPaintBox; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private FIsAnimation:boolean; //определяет, включена ли анимация FAnimStopKadr:Integer; //время задержки кадра FPigs:TPigs; // сами кадры public procedure UploadPigs; //загрузка кадров procedure DestroyPigs; //выгрзука кадров procedure StartAnimPigs; //запуск анимации end; procedure TForm1.FormCreate(Sender: TObject); begin FIsAnimation:=false; //при старте анимация отключена! FAnimStopKadr:=100; //задержка кадра 100 мс UploadPigs; //загружаем картинки end; procedure TForm1.StartAnimPigs; var b:byte; begin b:=0; while FIsAnimation do begin PaintBox1.Canvas.Draw(0,0,FPigs[b]); Inc(b); if b > High(FPigs) then b:=0; Sleep(FAnimStopKadr); Application.ProcessMessages; if Application.Terminated then FIsAnimation:=false; end; end; procedure TForm1.UploadPigs; //загрузка картинок в массив var b:byte; begin SetLength(FPigs, 5); for b:=Low(FPigs) to High(FPigs) do begin FPigs[b]:=TJPEGImage.Create; //файлы с картинками pig1.jpg, pig2.jpg и т. д.. FPigs[b].LoadFromFile(ExtractFilePath(Application.ExeName)+'pig' +IntToStr(b+1)+'.jpg'); end; end; procedure TForm1.Button1Click(Sender: TObject); begin FIsAnimation:=not FIsAnimation; if FIsAnimation then StartAnimPigs; end; procedure TForm1.FormDestroy(Sender: TObject); begin FIsAnimation:=false; Application.ProcessMessages; DestroyPigs; end; procedure TForm1.DestroyPigs; var b:byte; begin for b:=Low(FPigs) to High(FPigs) do FPigs[b].Destroy; SetLength(FPigs, 0); end; Проверил, все работает на ура) |
#4
|
||||
|
||||
![]() Для одной свинки может и так, а вот если у вас будет стадо?
Тогда Sleep(FAnimStopKadr); будет все портить. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Для стада, нужен как минимум простейший движок) Как мне показалось, а у автора вопроса, такой цели небыло)
|
#6
|
|||
|
|||
![]() Кстати, вместо функции Sleep, лучше использовать следующую:
Код:
procedure Delay(dwMilliseconds: Longint); var iStart, iStop: DWORD; begin iStart := GetTickCount; repeat iStop := GetTickCount; Application.ProcessMessages; until (iStop - iStart) >= DWORD(dwMilliseconds); end; вызов соответственно, вместо Sleep(FAnimStopKadr); - Delay(FAnimStopKadr); лагов не будет) |
#7
|
||||
|
||||
![]() Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |