Skocz do zawartości

[omega] Tor lotu pocisku.


gaski

Polecane posty

Witam...

zastanawiam się jak zrobić:

 

a) mam pocisk

B) co zrobić żeby leciał z danego x, y do innego x, y po linii prostej ?

c) żeby bitmapa obróciła się w stronę punktu docelowego ?

 

nie mam zielonego pojęcia jak sie zabrać za takie coś.

proszę o pomoc

Link do komentarza
Udostępnij na innych stronach

To jest wzór na odcinek, odcinek to punkty leżące na jednej prostej między dwoma punktami. Pierwsza współrzędna to x, druga y. "a" jest jako współczynnik przesunięcia, jest między 0, a 1 (włącznie obustronnie), no i nie wiem jak to wytłumaczyć. W Delphi to będzie:

function Line(var p1 : TPoint; var p2 : TPoint; delta : integer):TPoint;
begin
 Result.x := p1.x*delta + p2.x*(1-delta);
 Result.y := p1.y*delta + p2.y*(1-delta);
end;

Pisałem na sucho, ale powinno działać. 0

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

heh. dobra, widzę, że muszę sie jeszcze trochę poduczyć zanim to zrozumiem ;)

liczyłem, że będzie to coś prostszego, jak na razie nie mam zielonego pojęcia jak zastosować to w moim programie, a tym bardziej w zdarzeniu "move" pocisku ;)

Według mnie Force'owi chodziło o obliczenie kierunku lotu pocisku.

Gdy result zwróci X=-4 Y=3 to kierunek poruszania się pocisku to będzie po przekątnej na lewo, dół.

Potem tylko w on Move pocisku zmieniasz jego pozycję dodając kierunek ruchu, np:

// to przy wystrzeleniu pocisku
Kierunek:=Line(skad,dokad,delta);
// to podczas lotu
Pocisk.X:=Pocisk.X+Kierunek.X;
Pocisk.Y:=Pocisk.Y+Kierunek.Y;

Link do komentarza
Udostępnij na innych stronach

heh. dobra, widzę, że muszę sie jeszcze trochę poduczyć zanim to zrozumiem ;)

liczyłem, że będzie to coś prostszego, jak na razie nie mam zielonego pojęcia jak zastosować to w moim programie, a tym bardziej w zdarzeniu "move" pocisku ;)

Przecież to matma na poziomie liceum :D No co prostszego możesz liczyć :> ??

Trzeba logicznie myśleć, analizować, jak to byś zrobił.

Link do komentarza
Udostępnij na innych stronach

Nie no, teraz widzę, że troche przekombinowałem. Tak będzie na pewno dobrze:

function Line(var pStart : TPoint; var pEnd : TPoint; delta : single):TPoint;
begin
 Result.x := pEnd .x*delta + pStart .x*(1-delta);
 Result.y := pEnd y*delta + pStart .y*(1-delta);
end;

A teraz opis:

pStart-punkt początkowy

pEnd - końcowy

delta - przesuniecie

jeśli delta=0 to oznacza, że jesteśmy w punkcie początkowym, a jak 1 to w końcowy, i po prostu płynnie przechodzimy od 0 do 1 i dostajemy punkt w którym jest nasz obiekt w czasie delta, gdy delta=0.5 to punkt jest w połowie między punktami.

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Nie no, teraz widzę, że troche przekombinowałem. Tak będzie na pewno dobrze:

function Line(var pStart : TPoint; var pEnd : TPoint; delta : single):TPoint;
begin
 Result.x := pEnd.x*delta + pStart.x*(1-delta);
 Result.y := pEnd.y*delta + pStart.y*(1-delta);
end;

A teraz opis:

pStart-punkt początkowy

pEnd - końcowy

delta - przesuniecie

jeśli delta=0 to oznacza, że jesteśmy w punkcie początkowym, a jak 1 to w końcowy, i po prostu płynnie przechodzimy od 0 do 1 i dostajemy punkt w którym jest nasz obiekt w czasie delta, gdy delta=0.5 to punkt jest w połowie między punktami.

 

Czyli wywołujesz to np: w Timerze i zmieniasz tylko parametr Delta.

A funkcja zwróci aktualną pozycję pocisku ;)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...