Już kiedyś piałem na ten temat ale dostałem dość niezrozumiałą odpowiedź> mianowicie - jak zrobić animowany tekst poruszający się z jakimś przyspieszeniem????
RadeG opisałem ci to wtedy dokładnie, nie wiem czego jeszcze chcesz...
Tak, ale tam gdzie trzeba było wpisać w "type" wywala błąd - czy mógłbyś jeszcze raz napisać proszę?
// 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ę;
/// CZY MOŻESZ NANIEŚC POPRAWKI/////
type TLatajacyTekst=record
x, y : integer; // położenie naszego textu
v, a : real; // prędkość, przyspieszenie
text : string;
end;
zapomniałem dodać średnika, teraz działa.. jeśli nadal będziesz miał problem, - pytaj.
jakiś błąd jest tutaj andrew
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;
[dopisane]
i jaka jest ta procedurka czyszcząca???
bitmap.canvas.textOut(lataj.x, lataj.y, lataj.text); // rysuj!
zamień sobie "bitmap" na dowolny komponent posiadający canvas, tzn. moze to byc TForm, TImage, TPaintBox, jak chcesz do wyboru do koloru. A procedurkę czyszczącą zaraz dopisze.. tylko znajde..
o juz mam :
bitmap.Canvas.Brush.Color := rgb(0,0,0);
bitmap.Canvas.FillRect(bitmap.Canvas.ClipRect);
tu też zamień [b]bitmap[/b] na twój komonent, który odpowieda za wyświetlanie obrazu.
Jest chyba dość jasno wyjaśnione :)
Andrew - nie wkurzaj się - wszystko mi sięp opsuło. Czy mógłbyś podać mi źródła (proszę ) - w koncu jestem tylko szeregowym.