maly158 Opublikowano 7 Września 2009 Udostępnij Opublikowano 7 Września 2009 Pewnie wszyscy lub prawie wszyscy, którzy bawili się w twozenie gier w 3D, przerobili tutorial tworzenia gier 3d dodany do GM'a. Chodzi mi konkretnie o mechanizm, który powoduje, że wrogowie odwracają się w naszą stronę - jeżeli robie tak jak w tutorialu wszystko jest ok. , ale chciałbym żeby moi wrogowie byli trójwymiarowi, a nie płascy jak w tutorialu. I tu zaczynają się schody - kiedy wstawiam jakiś obiek 3d to już ten mechanizm nie działa (postać porusza się w moim kierunku, ale nie odwraca się w moją stronę)- co robię źle i jak powiniem zrobić żeby było ok. GML d3d_draw_wall(x-8*global.playersin,y-8*global.playercos,20, x+8*global.playersin,y+8*global.playercos,0,tex,1,1); Chodzi mi konkretnie o ten kawałek kodu - rysuje scianę, która odwraca się w stronę gracza, ale jeżeli ma to byś jakaś bryła lub prosty model składający się z kilku brył to już nie działa - może ten kod poprawnie działa tylko z obiektem typu "wall". Z góry dziękuję za pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2009 Udostępnij Opublikowano 7 Września 2009 GML d3d_transform_set_identity() d3d_transform_add_rotation_z(image_angle) d3d_transform_add_translation(x,y,0) // rysuj Wać d3d_transform_set_identity() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
maly158 Opublikowano 7 Września 2009 Autor Udostępnij Opublikowano 7 Września 2009 GML d3d_transform_set_identity() d3d_transform_add_rotation_z(image_angle) d3d_transform_add_translation(x,y,0) // rysuj Wać d3d_transform_set_identity() To rowiązanie już testowałe - sprawdziłem jeszcze raz i nie działa - chyba, że coś żle robię bo obiekt wyświetla się odwrócony i pod podłogą. Coś mam nie tak z kamerą czy co ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 7 Września 2009 Udostępnij Opublikowano 7 Września 2009 Coś mam nie tak z kamerą czy co ? tak. wklej tu ją, to poprawimy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
maly158 Opublikowano 7 Września 2009 Autor Udostępnij Opublikowano 7 Września 2009 tak. wklej tu ją, to poprawimy Kamerę mam odpalaną z obj_player (kamera i moja postać to jeden obiekt) Create: GML friction = 0.2; direction = 0; zdirection = 0; z = 12; krok = 0; //start trybu 3D d3d_start(); d3d_set_hidden(true); d3d_set_lighting(false); d3d_set_culling(false); //d3d_set_perspective(true); //interpolacja textur texture_set_interpolation(true); //aktywacja obiektu instance_create(x,y,obj_gun1); W Draw mam: GML d3d_set_projection(x,y,z+sin(krok),x+cos(direction*pi/180),y-sin(direction*pi/180),z-tan(zdirection*pi/180)+sin(krok),0,0,1); draw_set_alpha(1); draw_set_color(c_white); A w Step mam sterowanie myszką: GML mysz_x=display_mouse_get_x()-display_get_width()/2; mysz_y=display_mouse_get_y()-display_get_height()/2; display_mouse_set(display_get_width()/2,display_get_height()/2); direction-=mysz_x/16; zdirection+=mysz_y/16; if zdirection>75 then zdirection=75; if zdirection<-75 then zdirection=-75; to by było na tyle z rzeczy związanych z kamerą. EDIT: Czy mogę liczyć na kogoś w tej sprawie ???? Przetrenowałem już wszystkie znane mi rozwiązania i nic nie działa prawidłowo. Może ktoś ma jakiś przykład ??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
maly158 Opublikowano 5 Października 2009 Autor Udostępnij Opublikowano 5 Października 2009 Temat cały czas otwarty - czy mogę liczyć na czyjąś pomoc ???? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 8 Października 2009 Udostępnij Opublikowano 8 Października 2009 Platyś zawsze od usług! Miej sobie wyliczone cały czas w zmienne dir kierunek w stronę gracza. Robisz to przy pomocy funkcji GML point_direction(x,y,gracz.x,gracz.y); By wartość cały czas była aktualna wyliczaj to w step. Teraz jedyne co musisz zrobić to przy rysowaniu modelu odpowiedni edytować wartości x i y wszystkich wierzchołków. Robisz to przy pomocy funkcji GML lengthdir_x(len,dir); //Dla współrzędnej x lengthdir_y(len,dir); //Dla współrzędnej y</span></span></span></span> Współrzędna pionowa z zostaje bez zmian. Przykładowo jeżeli dany wierzchołek modelu ma się znajdować w pozycji x+90, y+10 to rysujesz go w pozycji: GML x+lengthdir_x(90,dir); y+lengthdir_y(10,dir); Czyli przykładowo rysowanie ściany wyglądać będzie tak: GML d3d_draw_wall(x-lengthdir_x(8,dir),y-lengthdir_y(8,dir),20, x+lengthdir_x(8,dir),y+lengthdir_y(8,dir),0,tex,1,1); Powodzenia! P.S. Gdyby wrog obracał się dobrze, ale cały czas był by odwrócony złą stroną, czyli stał na przykład ciągle bokiem, albo tyłem to jedyne co musisz zrobić to zwiększać/zmniejszać wartość dir o odpowiedni kąt. EDIT: O przepraszam, pomyliło mi się wszystko. Zaraz poprawię. EDIT2: Nie, nie mam teraz siły myśleć. Później może wykminię. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
maly158 Opublikowano 12 Października 2009 Autor Udostępnij Opublikowano 12 Października 2009 Byłbym ogromnie wdzięczny bo już nie wiele zostało mi do skończenia gry nad którą teraz pracuje, a nie chcę robić płaskich postaci wrogów. Z góry dzięki za pomoc. EDIT: Sprawdziłem twoje rozwiązanie działa tak samo jak to z tutoriala - jest ok. jeżeli rosowana jest ściana (d3d_draw_wall), ale przy rysowaniu drył typu stożek (d3d_draw_cone), walec (d3d_draw_cylinder) itp. jest czapa tzn wróg nie odwraca się. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się