gaski Napisano Październik 23, 2007 Zgłoś Share Napisano Październik 23, 2007 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 More sharing options...
krajew4 Napisano Październik 24, 2007 Zgłoś Share Napisano Październik 24, 2007 jezeli masz dwa punkty x1,y1 i x2,y2 to mozesz wyliczyc sobie rownanie prostej, na ktorej leza te punkty, mozesz rowniez obliczyc kat z arctana i obrocic bitmape My life for Aiur! Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Październik 24, 2007 Zgłoś Share Napisano Październik 24, 2007 (xn,yn) = (x1,y1) * a + (x2,y2)*(1-a) 0 Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
gaski Napisano Październik 24, 2007 Autor Zgłoś Share Napisano Październik 24, 2007 Force: mógłbyś trochę jaśniej rozpisać twój wzór, lub przenieść go do delphi ? proszę. Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Październik 24, 2007 Zgłoś Share Napisano Październik 24, 2007 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 More sharing options...
gaski Napisano Październik 24, 2007 Autor Zgłoś Share Napisano Październik 24, 2007 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Demon64 Napisano Listopad 8, 2007 Zgłoś Share Napisano Listopad 8, 2007 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 More sharing options...
Jason Napisano Listopad 8, 2007 Zgłoś Share Napisano Listopad 8, 2007 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 No co prostszego możesz liczyć :> ?? Trzeba logicznie myśleć, analizować, jak to byś zrobił. Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Listopad 8, 2007 Zgłoś Share Napisano Listopad 8, 2007 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 More sharing options...
Demon64 Napisano Listopad 17, 2007 Zgłoś Share Napisano Listopad 17, 2007 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.