animacja tekstu

0

Hej mam pytanie. Jak zrobić żeby tekst poruszał się ruchem jednostajnie przyspieszonym. Proszę o wskazówki do kodu zamieszczonego poniżej.(Procedurę sam pisałem)Z góry dziękuję :-)

Procedure Tform1.anim(x,y:integer);
var
B:TBitmap;
begin
B:=Tbitmap.create;
B.height:=40;
B.width:=canvas.textwidth(Dtext)*10; //*10 - rozmiar czcionki
B.canvas.font.name:='Courier New';
B.Canvas.brush.color:=color;
B.canvas.Font.size:=10; //rozmiar czcionki
B.canvas.fillRect(Rect(0,0,canvas.textwidth(Dtext)*10,40));
while not(go) do
begin
For i:=x to height do
begin
Application.processMessages;
sleep(10);
B.canvas.font.color:=clwhite;
B.canvas.TextOut(10,10,Dtext);
B.canvas.Brush.style:=bsclear;
B.Canvas.font.color:=clblack;
B.canvas.textout(9,9,Dtext); //tu można wpisac wyraz
canvas.draw(x,i,B);
if (go) then break;
end;
end;
B.Free;
end;

0

Proszę o odpowiedź - bardzo mi zależy żeby dziś to zrobić please

0

Procedure Tform1.anim(x,y:integer);
var
B:TBitmap;
begin
B:=Tbitmap.create;
B.height:=40;
B.width:=canvas.textwidth(Dtext)*10; //*10 - rozmiar czcionki
B.canvas.font.name:='Courier New';
B.Canvas.brush.color:=color;
B.canvas.Font.size:=10; //rozmiar czcionki
B.canvas.fillRect(Rect(0,0,canvas.textwidth(Dtext)*10,40));
For i:=x to height do
begin
Application.processMessages;
sleep(10);
B.canvas.font.color:=clwhite;
B.canvas.TextOut(10,10,Dtext);
B.canvas.Brush.style:=bsclear;
B.Canvas.font.color:=clblack;
B.canvas.textout(9,9,Dtext); //tu można wpisac wyraz
canvas.draw(x,i,B);
end;
B.Free;
end;

Po wywaleniu niepotrzebnych linii ... to dziala [hurra]
Napisz dokladnie o co chodzi.

0

Dodaj go:=false na poczatku...

0

Dodaj go:=false na poczatku...

to przy jego kodzie zapletli mu sie "na amen" ...
bo nie ba w petlli while niczego co by zmienilo wartosc 'go' na true ....
A tak w ogóle, to po co te 'go'?

0

Po pierwsze nie używaj [code]sleep[/code] i [code]application.processMessages[/code], to tylko niepotrzebnie spowolni program. Użyj timera z interwałem 20 ms.

czyli :

//globalnie :

type TLatajacyTekst=record
x, y : integer; //położenie naszego textu
v, a : real // prędkość, przyspieszenie

  text  : string;
end;

var lataj : TLatajacyTekst;

procedure form1.onCreate(...);
begin
// tu ustawiamy parametry
lataj.x := 0;
lataj.y := 0;
lataj.v := 0; // prędkość początkowa
lataj.a := 0.5 // prędkość przyspieszania
lataj.text := 'Hello World!';

end;

procedure onTimer(...);
begin
// tutaj wstaw sobie procedurkę czyszczącą tło pod tekstem

   lataj.v := lataj.v + lataj.a;  //przyspieszaj!
   lataj.x := round(lataj.x + lataj.v);  
   bitmap.canvas.textOut(lataj.x, lataj.y, lataj.text);  //rysuj!
   

end;

dzięki takiemu rozwiązaniu masz pęłna kontrolę nad ruchem, tzn jeśli chcesz

  • bezruch : a:=0; v:=0;
  • ruch jednostajny : a:=0; v:=jakaśliczba;
  • ruch jednostajnie przyspieszony : a:=jakaśliczba;

jeśli chcesz odwrócić ruch (przeciwny kierunek) to ustaw 'a' na ujemną liczbę;

powodzenia!

0

A tak w ogóle, to po co te 'go'?

Prawdopodobnie go jest ustawiane na TRUE w OnClick jakiegoś buttona.

1 użytkowników online, w tym zalogowanych: 0, gości: 1