Poruszanie po planszy

0

Hey. Mam taki problem :-)
Jak zrobić żeby : gdy kliknę w dowolne miejsce na formie, to wtedy shape (lub byle co, button itd..) ma tam "dojechać". Nie chodzi mi o takie coś :

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Shape1.Left := X - shape1.Width div 2;
Shape1.Top := Y - shape1.Height div 2;
end;

Jak już mówiłem, shape do dojść (dojechać) w to miejsce gdzie klikneliśmy. Wie ktoś o co mi chodzi ? :/

0

Taa..... Takie coś jak w grze Kulki :)

Tyle, że zrobienie tego będzie trochę trudne...

Musisz chyba wiedzieć, gdzie jest element i gdzie ma dojechać.
A jak to wiesz, to wtedy wystarczy chyba zmieniać mu po prostu położenie. Lub rysować go na nowo w innym miejscu, a stare wymazywać...

0

Taa..... Takie coś jak w grze Kulki

Nie... chodzi mi raczej o takie coś jak występnuje w grach strategicznych.

0

Hmm dokładnie ci nie powiem jak to zrobić, ale jeżeli komponent ma tam płynnie "dojść / dojechać" trzeba podzielić całą drogę na mniejsze odcinki, np co 3 pixele w kierunku poziomym (x) oraz pionowym (y), a później stworzyć pętlę która będzie przesuwała kolejno komponent. Chociaż przy takim rozwiązaniu, to sam nie wiem, czy będzie to płynne :-8 , ale można spróbować.

0

Jesli Cie dobrze zorzumialem...

...to mi sie wydaje, ze to nie bedzie trudne:)

Form1: TForm1;
Ruch : Boolean;
Xp, Yp : Integer;

implementation

{$R *.dfm}

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled := True;
Xp := X;
Yp := Y;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Xp > Shape1.Left then Shape1.Left := Shape1.Left + 1;
if Xp Shape1.Top then Shape1.Top := Shape1.Top + 1;
if Yp

0

Hmm to najprostsze rozwiązanie, problem tylko że obiekt będzie się poruszał pod kątem 45 stopni, aż dojdzie do poziomu celu... wtedy zacznie się poruszać tylko pionowo lub poziomo.

0

Dzielisz sobie na x odcinków całą drogę (x zależy od tego, jak płynnie chcesz, żeby się poruszał) i potem przesuwasz go w pętli "For i:=1 to x do" o [(xk-xp)/x; (yk-yp)/x], gdzie xk - x końcowe, xp - x początkowe itd.
P.S. Ten kod trza troszkę zmodyfikować, chyba, że potrafisz przesuwać element np. o 3 1/23 piksla :) tak, żeby przesuwało w takiej sytuacji 22 razy o 3 i raz o 4 piksle... Mam nadzieję, że mnie zrozumiałeś.

0

Adam przeczytałem raz i zrozumiałem bardzo mało. Ale przeczytam jeszcze kilka razy i zrozumie :p
Vodka dzięki, działa super.
I dziękuje całej reszcie za pomoc.
:-)

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