Skocz do zawartości

Prosta amimacja 3D - Pytanie


maly158

Rekomendowane odpowiedzi

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

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

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

Coś mam nie tak z kamerą czy co ?

tak. wklej tu ją, to poprawimy

Odnośnik do komentarza
Udostępnij na innych stronach

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

  • 4 tygodnie później...

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...