Gibki Kaktus Opublikowano 14 Marca 2013 Udostępnij Opublikowano 14 Marca 2013 W 3d bawię się od wczoraj i jestem w nim całkowicie zielony, więc raczej często będę zadawał jakieś banalne i bezsensowne pytania w tym temacie, żeby nie zaśmiecać całego forum. Więc pierwsze 2 pytania: 1)Jak zrobić, aby pocisk jako oddzielny obiekt leciał nie tylko w stronę w którą postać jest odwrócona(N/S/W/E) ale także góra/dół. Mam taki kod jeśli chodzi o kamerę(jeśli to pomoże): GML //create pitch=0; global.camsin = sin(direction*pi/180); global.camcos = cos(direction*pi/180); z=20; pitch=0; //step direction -= (display_mouse_get_x() -display_get_width()/2)/10; pitch += (display_mouse_get_y() -display_get_height()/2)/10; pitch = max(min(pitch,100),-100); display_mouse_set(display_get_width()/2,display_get_height()/2); //end step global.camsin = sin(direction*pi/180); global.camcos = cos(direction*pi/180); //draw d3d_set_projection(x,y,z,x+cos(direction*pi/180),y-sin(direction*pi/180),z-sin(pitch*pi/180),0,0,1); Jeśli chodzi o pocisk, to jest to po prostu pokazywanie go w 3d, direction gracza + speed. Nic więcej. 2)Jak zrobić grubsze tekstury? Chodzi mi o to, że jak mam kod: GML d3d_draw_wall(x1,y1,z1,x2,y2,z2,tex,1,1); To ściany są cieniutkie i brzydko się prezentują z boku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 14 Marca 2013 Udostępnij Opublikowano 14 Marca 2013 2) Zamiast ścian stawiaj bloki. A co do 1) to jedna z trudniejszych rzeczy do zrobienia. ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 14 Marca 2013 Udostępnij Opublikowano 14 Marca 2013 Z tego co widzę to masz już zrobione rozglądanie się w górę i w dół. Zmienna pitch to kąt pod jakim postać patrzy w pionie. Możesz dzięki niej dodać pociskowi wektor który będzie przemieszczać za pomocą tego kąta pocisk w górę/dół. Tam gdzie masz strzelanie ( kod gdzie tworzysz pocisk instance_create() ) zmodyfikuj tak: GML pocisk = instance_create( nawias uzupełnij ); pocisk.Zspeed = sin(pitch*pi/180); i w Step pocisku: GML z += Zspeed; To powinno zadziałać. Po za tym jak chciałbyś się bawić w optymalizację ( a w przypadku trybu 3D w GM który jest wolny, wypadało by ) to wszystkie pi/180 możesz zastąpić stałą która będzie wynosić pi/180 ( stałe w GM definujesz w tabeli pod shift+crtl+N ) pogrubione jest zbędne pitch=0; global.camsin = sin(direction*pi/180); global.camcos = cos(direction*pi/180); z=20; pitch=0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 14 Marca 2013 Autor Udostępnij Opublikowano 14 Marca 2013 Zrobiłem tak jak napisałeś. i jeśli w step daje z += to pisze, że brak zmiennej z. A jak daje z= zamiast +=, albo w create z=0 np, to wtedy leci normalnie do przodu tylko. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 14 Marca 2013 Udostępnij Opublikowano 14 Marca 2013 Zadeklaruj w crate pocisku z = 0; I w jego draw: GML d3d_transform_set_translation(x, y, z); // tutaj wstaw draw modelu pocisku ( koniecznie rysuj na pozycji 0, 0, 0 ) d3d_transform_set_identity(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 15 Marca 2013 Autor Udostępnij Opublikowano 15 Marca 2013 Jak za pomocą d3d_draw_block lub wall rysować z pozycji 0,0,0? :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Marca 2013 Administratorzy Udostępnij Opublikowano 15 Marca 2013 d3d_draw_block(0,0,0... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Żeby wycentrować twój blok na pozycji 0 0 0 to rysuj go np tak ( -8, -8, -8, 8, 8, 8 ... ) Wtedy będzie miał wielkość 16x16x16 ale origin na środku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 15 Marca 2013 Autor Udostępnij Opublikowano 15 Marca 2013 Dalej jest, że tylko na boki, z tym, że wcześniej był zwrócony cały czas przodem do postaci, a teraz w zależności jak jest obrocona początkowo kamera(znaczy przy tworzeniu pocisku), to pocisk jest zwrócony albo przodem, albo pod ukosem, albo bokiem całkiem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Podejrzyj ile wynosi zmienna Zspeed przy tworzeniu pocisków przy różnych kątach patrzenia w górę i dół. Ile wynosi jak patrzysz się na wprost, ile jak pod kątem pitch = 100 ( u ciebie maxymalnym ). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 15 Marca 2013 Autor Udostępnij Opublikowano 15 Marca 2013 Odkryłem, że jeśli chodzi o pozycję góra/dół to jest na odwrót(tzn jak patrzę się w dół, to strzela do góry, a jak do góry to strzela do dołu). I jak pokazywać tekst w 3d? Bo draw_text nie działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Draw text działa ale musisz zrobić sobie osobny obiekt który będzie ci robił za hud. Obiekt taki musi mieć najmniejszy depth by nic go nie przysłaniało. jego Draw: GML // HUD ---------------------------------------------------------------------------------------------- d3d_set_lighting( false ); d3d_set_hidden( false ); d3d_set_projection_ortho( 0, 0, view_wview, view_hview, 0 ); draw_set_color( $FFFFFF ); draw_text( view_xview + 10, view_yview + 10, string(fps) ); d3d_set_lighting( true); d3d_set_hidden( true ); Oczywiście d3d_set_lighting( ); ustawiasz tylko wtedy jak ze świateł korzystasz To działa tak że na tą chwilę tryb kamery 3D jest wyłączana i włączana jest kamera 2D i rysowane są rzeczy na ekranie po czym wszystko znowu się przestawia na 3D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 15 Marca 2013 Autor Udostępnij Opublikowano 15 Marca 2013 Gdy mam tak: GML d3d_set_hidden( false ); d3d_set_projection_ortho( 0, 0, view_wview, view_hview, 0 ); draw_text( view_xview + 10, view_yview + 10, string(fps) ); d3d_set_hidden( true ); To jest coś zbugowane, bo tak pokazuje: a jak tak: GML d3d_set_hidden( false ); draw_set_color( $FFFFFF ); draw_text( view_xview + 10, view_yview + 10, string(fps) ); d3d_set_hidden( true ); To nie pokazują się napisy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 To problem z kolejnością id obiektów kamery i huda. Obiekt z hudem jak dobrze pamiętam powinien istnieć wcześniej niż obiekt z kamerą 3D. Albo na odwrót potestuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Ja się nie znam ale po 1 po co wam w ogóle to d3d_set_hidden( false ); to nie wiem plus czy czasem nie powinno być odwrotnie jak już? Z tego co wiem ale mogę się mylić d3d_set_hidden( true ); sprawia że obiekty zasłonięta innymi obiektami będą przerznie widoczne, chyba jedyne zastosowanie ich wdziałem albo w backgroundzie albo w partyclach nie pamiętam ja to bym pokasował i po prostu tam gdzie mam kamerę orte daj depth na -1000 edit: Jak za pomocą d3d_draw_block lub wall rysować z pozycji 0,0,0? :D jak chcesz coś narysować w pozycji 0,0,0 urzywasz tego co ci HuderLord napisał czyli np GML d3d_transform_set_translation(0, 0, 0);//pozycja obieltu d3d_draw_block(i tu wielkość obiektu tu też zależny czy chcesz mieć origin point na środku czy z innej strony czyli np. origin na środku obiektu d3d_draw_block( -8, -8, -8, 8, 8, 8 ... ) lub origin na środku w szerokości na dole w wysokości i na początku w długości d3d_draw_block( 0, -8, 0, 8, 8, 8 ... ) itp d3d_draw_block( 0, 0, 0, 8, 8, 8 ... ) [color="#FF0000"]d3d_transform_set_identity();// ważne by zawsze po użyciu jakiejkolwiek funkcji transform użyć d3d_transform_set_identity() by funkcja transform nie wpłynęła na działanie innych obiektów 3D[/color]</span> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 To włącza i wyłącza sortowanie depth 3D obiektów. Ale czy faktycznie trzeba to wyłączać przy przechodzeniu w kamerę 2D to w sumie nie wiem. Przeglądając forum yoyogames widziałem że tak ludzie zawsze robią. U mnie nigdy to nic nie dawało. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 15 Marca 2013 Udostępnij Opublikowano 15 Marca 2013 Nigdy nie stosowałem, i wszystko działo zawsze mi bez problemu 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ę