Neomex0 Temat założony przez niniejszego użytkownika |
Allegro C++ Poruszanie się postacią w stronę myszy » 2010-05-06 16:21:32 Witam, Zrobiłem, aby postać obracała się w kierunku myszy, jednak nie wiem jak ją przesunąć. if( key[ KEY_W ] ) { player.x += cos( player.angle ) * 5; player.y += sin( player.angle ) * 5; } Powyższe rozwiązanie przesuwa gracza DO OKOŁA punktu, a ja chcę żeby on się przemieszczał DO punktu położenia myszy. Za wszelką pomoc będę wdzięczny :) |
|
szyx_yankez |
» 2010-05-06 16:27:15 if( player.x > mouse_x ) player.x--;
if( player.x < mouse_x ) player.x++;
if( player.y > mouse_y ) player.y--;
if( player.y < mouse_y ) player.y++;
|
|
Neomex0 Temat założony przez niniejszego użytkownika |
» 2010-05-06 16:32:31 Nie można zrobić, żeby szedł dokładnie na skos, dokładnie w wyznaczony punkt? Jeśli potem zrobię strzelanie, to pocisk lecący w ten sposób będzie trochę... dziwny :) |
|
szyx_yankez |
» 2010-05-06 19:38:05 Czasami słowa jest mi łatwiej wyrazi za pomocą kodu, toteż napisałem dla Ciebie przykładową aplikację, skompiluj(nie trzeba żadnych bitmap ani nic). #include <allegro.h>
int main() { allegro_init(); install_keyboard(); install_mouse(); scare_mouse(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1024, 768, 0, 0 ); BITMAP * bufor = NULL; BITMAP * src = NULL; bufor = create_bitmap( 1024, 768 ); src = create_bitmap( 20, 20 ); clear_to_color( src, makecol( 0, 255, 0 ) ); int x( 333 ), y( 333 ); double xx( x ), yy( y ), aa( x ), bb( y ); while( !keypressed() ) { clear( bufor ); xx = x - mouse_x; yy = y - mouse_y; xx = xx / 200; yy = yy / 200; aa -= xx; bb -= yy; if( aa > x ) x++; if( aa < x ) x--; if( bb > y ) y++; if( bb < y ) y--; if( aa > 0 ) aa += xx / 2; if( bb > 0 ) bb += yy / 2; if( aa < 0 ) aa -= xx / 2; if( bb < 0 ) bb -= yy / 2; blit( src, bufor, 0, 0, x -( src->w / 2 ), y -( src->h / 2 ), src->w, src->h ); show_mouse( bufor ); blit( bufor, screen, 0, 0, 0, 0, 1024, 768 ); } return false; } END_OF_MAIN();
|
|
ison |
» 2010-05-07 15:28:04 @szyx_yankez twoje rozwiązanie jest bardzo łopatologiczne i nie działa perfekcyjnie... co do problemu autora to musisz zwyczajnie na bieżąco liczyć kąt utworzony między myszką a graczem. Żeby postać poruszyła się w danym kierunku to do osi x dodajesz cos z kąta a y sin (pamiętaj o zamianie stopni na radiany). Jeśli ci nie wychodzi takie rozwiązanie to znaczy że źle liczysz kąt.
Jeśli bardzo chcesz to mogę gdzieś znaleźć moją starą funkcję którą wykorzystywałem w grach 2D. W argumentach przyjmowała pozycję obiektu 1 i pozycję obiektu 2 i zwracała wartość o jaką ma się przesunąć obiekt 1 żeby pójść w kierunku obiektu 2. |
|
DejaVu |
» 2010-05-07 15:43:54 Kiedyś jak miałem więcej cierpliwości do Was dałem odpowiedź następującą na podobne pytanie: http://forum.ddt.pl/?Tid=156. Moja cierpliwość się kończy widząc Wasze skrajne lenistwo do używania wyszukiwarek. Powyższe rozwiązanie jest niepełne - musisz je sobie uzupełnić o obliczenie kąta pomiędzy obiektem, a myszką - ale to już masz więc myślę, że temat można uznać z miejsca za rozwiązany. |
|
dmx81 |
» 2010-05-08 12:50:32 zaczalem pisac, ale widze, ze dokladnie to samo pan Piotr napisal w zalaczonym linku - wiec to musi wystarczyc, daj znac, czy rozwiazales swoj problem.pamietaj, ze liczysz kat pomiedzy "wirtualna" linia mysz(x,y) a postac(x,y), cos liczysz dla przesuniecia po osi x, sin dla y |
|
Neomex0 Temat założony przez niniejszego użytkownika |
» 2010-05-08 16:12:37 Też mieliście wszyscy racje, ale tutaj podsuneli mi idealne rozwiązanie: http://www.allegro.cc/forums/thread/603985@Piotr Czytałem dużo wcześniej tamten post, ale nie mogłem czemuś dać sobie rady tą metodą. Poza tym nie bulwersuj się jak padnie po raz milionowy to samo pytanie, ponieważ nie wszyscy piszą na forum od razu w momencie napotkania błędu i wbrew pozorom nie jest tak łatwo znaleźć odpowiedź, jeśli nie wie się gdzie jej szukać. :) |
|
« 1 » 2 |