Bardzej zaawansowane poruszanie :P






Co tu znajdziesz?
- wytyczanie trasy sprite'owi :)
- wytyczanie trasy na mapie (+ kolizja)
Kod do tej gierki (eeeee to nie gra) znajdziesz tutaj

Zostało tam wykorzystane wytyczanie trasy itp.
Kod źródłowy jest wręcz nafaszerowany podpowiedziami i opisami co do czego służy i jak to się robiło.
Więc mam taką nadzieję, że nie będziecie potrzebowali mojej pomocy: tutaj tylko napiszę jak wytyczyć trasę sprite'a.
Kod, który przedstawię tutaj został skomponowany przez pq :]


Po pierwsze do sekcji VAR wpisujemy:
lewo,prawo,dol,gora : boolean; //będzie nam mówić, w którą stronę szliśmy
x1,x2s,y1,y2s,dx,dy,i,d,px,py :integer;//jakieś badziewia wyliczeniowe :P
fx,fy: double; //też badziewia ;P przesuwaj : boolean = false; //wątek, który będziemy sprawdzać w dxtimer (aby poruszać postacią)

I standardowo umieszczmy noxxdxsprite na naszej formie (niestety ;)


procedure ruch_postaci(postac : TAnimation; newx, newy : integer);
begin
x1:=round(postac.x); //pobera pozycję x sprite'a
y1:=round(postac.y); //pobiera pozycję y sprite'a
//wytaczanie pozycji :P
//dzięki temu będziemy mogli ustalić, w którą stronę będzie poruszało się nasze słoneczko :)
if x1 > newx then
begin
lewo := true;
prawo := false;
end else
begin

lewo := false;
prawo := true;
end;


if y1 > newy then
begin
dol := true;
gora := false;
end else
begin

dol := false;
gora := true;
end;

//oto juz kod od pq :)
x2s:=newx;
y2s:=newy;
dx:=x2s-x1;
dy:=y2s-y1;
d:=round(sqrt(sqr(abs(dx)+abs(dy)))); // wyliczam odleglosc po skosie z pitagorasa - komentarz pq :]
fx:=dx/d;
fy:=dy/d;

i:=0;
przesuwaj := true;
end;

A to wsadzamy do DxTimer:
if przesuwaj = true then
begin

px:=round(x1+i*fx);
py:=round(y1+i*fy);
sprite.x := px;
sprite.y := py;
if i >= d then
begin

przesuwaj := false;
end else
begin

i := i + 3;//liczbę 3 możemy zastąpić inną liczbą (szybkość poruszania się)
end;
end;