kordian Opublikowano 15 Lipca 2009 Udostępnij Opublikowano 15 Lipca 2009 Hej To pytanie zadawałem wcześniej w dziale dla początkujących ale nie znalazłem rozwiązania... Jestem początkującym użytkownikiem Game Makera i robię moją pierwszą platformówkę z widokiem z boku Nie jestem programistą, całkowicie zmieniam przede wszystkim grafikę i dźwięk, korzystam z gotowego silnika "mario" Martina Piecyka i modyfikuję go tu i tam :) Ostatnio zapragnąłem aby platformy w grze posiadały głębię 3d. Znalałzem tutorial na you tube w którym jest pokazane jak to zrobić : stworzyłem więc obiektY "obj_cam" i "obj_block" poczym wrzuciłem je do rooma gdzie znajduje się mój "oPlayer1" , czyli postać którą steruję w grze. w Drawie obiektu kamery wpisałem kod: d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); Wsyztko chodzi sprawnie z wyjątkiem dwóch rzeczy: 1. kamera zawsze centruje bohatera, tak że gdy dociera do krawędzi rooma ukazany jest nie istniejący obszar background. Jak poinformować kamerę żeby zatrzymała się przy krawędzi ekranu , a potem gdy Player znajdzie się w odpowiedniej odległości znowu weszła w tryb śledzenia. 2. Gdy bohater umiera chcę aby kamera stanęła w miejscu. Śmierć bohatera to w mojej grze oddzielny obiekt. Gdy podpinam pod niego kamerę zachodzi porblem nr 1. Gdy ją wyłączam cały obraz odwraca się do góry nogami. Jest jakiś sposób aby odwrócić współżędne wyświetlania Viewa w trybie 2 d ? Będę ogromnie widzięczny za porady, Jesli uda mi się wystrugać mój projekcik, oczywiście dam znać i zamieszczę stosowne podziękowania w credits :) pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Lipca 2009 Administratorzy Udostępnij Opublikowano 15 Lipca 2009 otóż tak: GML (create) mam_sledzic = true; GML (step) if mam_sledzic { x = oPlayer1.x; y = oPlayer1.y; } d3d_set_projection(x,y+1,640,x,y,0,0,0,1); wywołanie kodu objCamera.mam_sledzic = false zatrzymuje kamerę. Zresztą pisałem Ci to już w poprzednim temacie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
47xxxxxxxx Opublikowano 15 Lipca 2009 Udostępnij Opublikowano 15 Lipca 2009 gnysek:Ja mu podałem szybszy kod: GML if ! instance_number(oPlayer1) == 0 { d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); } i mu się przewraca. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Lipca 2009 Administratorzy Udostępnij Opublikowano 15 Lipca 2009 Co ty podałeś ? Jeżeli ilośc obiektów player jest równa zero, to śleź oPlayer1? Ja pierdziele, Ty nawet nie czytasz swojego kodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
47xxxxxxxx Opublikowano 15 Lipca 2009 Udostępnij Opublikowano 15 Lipca 2009 Zapomniałem o not xd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Lipca 2009 Administratorzy Udostępnij Opublikowano 15 Lipca 2009 Nadal jest źle, bo nie ma obiektu player, tylko jest oPlayer1, poza tym, kamera nie działa wcale, gdy go nie ma. Pamiętaj, ja siedzę w GM od ponad 6 lat, więc nie wygrasz ze mną. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 15 Lipca 2009 Autor Udostępnij Opublikowano 15 Lipca 2009 otóż tak: GML (create)mam_sledzic = true; GML (step)if mam_sledzic { x = oPlayer1.x; y = oPlayer1.y; } d3d_set_projection(x,y+1,640,x,y,0,0,0,1); wywołanie kodu objCamera.mam_sledzic = false zatrzymuje kamerę. Zresztą pisałem Ci to już w poprzednim temacie. Dzięki wielkie, teraz wpisałem to jak trzeba... Niestety dalej mam problemy. Kod działa, bo przy false nie wywala mi kamerki do 2d i nie odwraca obrazu ( tak było jak stosowałem wariant z instance_number(oPlayer1) ==0). natomiast pojawia się error funkcji draw ( którego nie było przy wariancie Instant_number). Ustawiałem mam_sledzić= false dla eventu Destroy obiektu oPlayer1, ale bez skutecznie bo kamerka wciąż domaga się współżędnej x. Ponadto nie mogę się doczytać jak sprawić aby współrzędne położenia oPlayer1 w roomie inicjowały kod mam_sledzic = false (tzn. jak to sformuować w GML). Głupol ze mnie ale naprawdę mi zależy na tej kamerce... Jeśli powiesz mi jak to zrobić to będzie super bo już padam z braku snu na twarz :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Lipca 2009 Administratorzy Udostępnij Opublikowano 15 Lipca 2009 dać w create przeciwnie do tego co w destroy (czyli zamiast false to true). Co do błędu w draw - podaj treść błędu, ale powód jest inny, bo pozycja x istnieje dla każdego obiektu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 15 Lipca 2009 Autor Udostępnij Opublikowano 15 Lipca 2009 dać w create przeciwnie do tego co w destroy (czyli zamiast false to true). Co do błędu w draw - podaj treść błędu, ale powód jest inny, bo pozycja x istnieje dla każdego obiektu. Działa! Popełniłem głupi błąd ( nie zaadresowałem akcji w evencie destroy oPlayer1 do kamery :jezor: ). Dzięki Wieelkie! :thumbsup: Wciąż tylko nie wiem jak ustawić wartości śledzenia na false w zależności od położenia obiektu. robiłem różne przymiarki, ale bez skutku. Chciał bym mu napisać że gdy Player 1 będzie w odleglości około połowy pola widocznosci kamery od scian rooma ( wszystkich czterech) to kamera ma się zatrzymać. czyli np jeśli room ma rodzielczość 800x 600 a pole widoczności 640x480 to jak oPlayer1 znajdzie się na pozycji rooma x= 320 px kamera ma przestać podążać w lewo za bohaterem (odpowiednio x= 480px, kamera nie podąża w prawo, y=240px do góry,y=360px, w dół itp. ) Chyba że jest na to inny, leprzy sposób... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 15 Lipca 2009 Administratorzy Udostępnij Opublikowano 15 Lipca 2009 coś w ten deseń: GML if objPlayer.x < 320 and objPlayer.x > 480 and .... //tak samo dla y { objCamera.mam_sledzic = true; } else objCamera.mam_sledzic = false; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 15 Lipca 2009 Autor Udostępnij Opublikowano 15 Lipca 2009 coś w ten deseń:GMLif objPlayer.x < 320 and objPlayer.x > 480 and .... //tak samo dla y { objCamera.mam_sledzic = true; } else objCamera.mam_sledzic = false; Wpisałem to i nawet działa (tylko ptaszki musiałem odwrócić) ale kamera zrywa animacje gdy przechodzi w tryb śledzenia. To wina skokowego środkowania obiektu który zdąża się w tym czasie przesunąć w polu widzenia. Co więcej gdy jest spełniony tylko jeden warunek to kamera przestaje zupełnie śledzić Playera1 ( czyli np skacząc przy ścianie x kamera nie łapie go w kadrze w osi y). Może można by tą projekcję 3d opisać oddzielnie dla każdej z osi? coś w tym stylu: if mam_sledzic_x { x = oCharacter.x; } d3d_set_projection(x,640,x,0,0,0,1); //tutaj nie wiem jak to zapisać, o ile się da dla tej funkcji if mam_sledzic_y { y = oCharacter.y; } d3d_set_projection(y+1,640,y,0,0,0,1);//tak samo ale to chyba i tak nie rozwiąze problemu skokowej animacji... <_< Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 15 Lipca 2009 Autor Udostępnij Opublikowano 15 Lipca 2009 if oCharacter.x > 300 and oCharacter.x < 800 and oCharacter.y > 250 and oCharacter.y < 800 //tak samo dla y { obj_cam.mam_sledzic = true; } else obj_cam.mam_sledzic = false; Wspomnę jeszcze tylko że wrzuciłem kod od Ciebie to do drawa Playera1, Adresowałem do kamerki... 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ę