kordian Opublikowano 10 Lipca 2009 Udostępnij Opublikowano 10 Lipca 2009 Pomocy! Jestem początkującym użytkownikiem Game Makera i robię moją pierwszą platformówkę. Nie jestem programistą, bardziej profesjonalnie zajmuje się grafiką i oprawą dźwiękową, korzystam z gotowego silnika "mario" 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ć : Oto co z niego zawarłem w grze: stworzyłem 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 create obiektu "obj_cam" wpisałem kod: d3d_start() d3d_set_lighting(false); d3d_set_culling(false); d3d_set_perspective(true); draw_set_color(c_white); w Draw tego obiektu wpisałem kod: d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); (obiekt ma ustawiony depth na 100) Rezultat jest prawie dobry :) Kamerka śledzi "oPlayer1" a perspektywa "obj_block" (ustawiony depth na 0) zmienia się jak trzeba. Jest jednak problem, bo kamera działa tak , że "oPlayer1" pojawiał się wyśrodkowany nawet gdy kończy się rozdzielczość mojego rooma i widok obejmuje obszar poza granicami ustalonymi dla planszy. Czy jest jakiś kod, który pozwoli mi na zatrzymanie ruchu kamery gdy "oPlayer1" zbliży się do krawędzi rooma ( tak jak to ma miejsce przy stosowaniu klasycznych "views" z game makera) Kolejny problem, który wiąże się z zastosowaniem "obj_cam" to jak narysować sprite'a (np. przedstawiającego życie bochatera) tak aby znajdował się on w stałym położeniu względem krawędzi widocznej sceny (nie rooma!) Będę ogromnie wdzięczny za pomoc. Autora kodu oczywiście umieszczę w ceditach, o ile uda mi się tylko doprowadzić projekt do przyzwoitego stanu, natychmaist dam znać. :) Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Lipca 2009 Administratorzy Udostępnij Opublikowano 10 Lipca 2009 GML if chce_sledzic { x = oPlayer1.x; y = oPlayer1.y; } d3d_set_projection(x,y,x,y,0,0,0,1); ustawienie chce_sledzic na true powoduje, ze kamera podąża, na false, że stoi w miejscu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 11 Lipca 2009 Autor Udostępnij Opublikowano 11 Lipca 2009 Hej. Dzięki za błyskawiczną odpowiedź :) Niestety nie całkiem to rozumiem , bo jak mówiłem z programowania ze mnie noga. Program odpowiada, że jest za mało argumentów aby skrypt zadziałał gdy go wpisuję (x,y,x,y,0,0,0,1). Zrobiłem to więc tak, że do obj_cam wpisałem kod: w create Event chce_sledzic=true; w draw Event if chce_sledzic=true { x = oPlayer1.x; y = oPlayer1.y; } d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); Rezultat jest dokładnie taki sam jak poprzednio. Gdy bohater dotyka krawędzi i umiera, wówczas wyskakuje mi komunikat: ERROR in action number 1 of Draw Event for object obj_cam: Error in code at line 9: d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); at position 30: Unknown variable x Żeby tego uniknąć próbowałem zmieniać obiekt który śledzi kamera na inny, error znika ale to nie zmienia faktu że kamera albo obejmuje nieistotny obszar sceny albo wogóle nie działa. Chciał bym zrobić coś takiego, żeby kamera wiedziała, że jak widok zbliża się do krawędzi rooma to trzeba się zatrzymać i ruszyć dopiero gdy oPlayer1 (bądź inny obiekt który będę chciał śledzić w grze) oddali się odpowiednio od krawędzi rooma. Kompletnie nie wiem dla jakiego obiektu, w którym evencie i co wpisać :( Ps. Czy znasz może odpowiedź na moje drugie pytanie ( jak w takim wypadku narysować spritea poruszającego się w stałej odległości od krawędzi ekranu)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
47xxxxxxxx Opublikowano 11 Lipca 2009 Udostępnij Opublikowano 11 Lipca 2009 Bohater umiera. Kamera pobiera x i y bohatera, tylko jak ma adresować jak nie ma bohatera? Edit:Musisz zrobić objekt obj_hud w którego draw: GML d3d_set_projection_ortho(0,0,640,480,0) <kod rysowania huda> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 11 Lipca 2009 Autor Udostępnij Opublikowano 11 Lipca 2009 Bohater umiera. Kamera pobiera x i y bohatera, tylko jak ma adresować jak nie ma bohatera? Edit:Musisz zrobić objekt obj_hud w którego draw: GMLd3d_set_projection_ortho(0,0,640,480,0) Wielkie dzięki! hud działa jak należy :). Co do tego umierania to rozumiem, ale wciąż nie wiem jak zrobić aby kamera inteligentnie się zatrzymała gdy widok dotrze do krawędzi rooma. Widok ma rozdzielczość 640x480. Całkowita rozdzielczość mojego pomieszczenia wynosi 800x 600 ale kamera nic sobie z tego nie robi i przekracza rzeczywistą krawędź planszy, pokazuje nieistniejący obszar wypełniając go kolorem background ( śledzi bohatera tak by zawsze był wyśrodkowany wzgledem krawędzi ekranu). Może znasz jakiś kod żeby kamera stanęła po dotarciu do krawędzi rooma? pozdrawiam i dziękuję Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
47xxxxxxxx Opublikowano 11 Lipca 2009 Udostępnij Opublikowano 11 Lipca 2009 daj to w kamerze: GML if instance_number(player) = 1 d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kordian Opublikowano 11 Lipca 2009 Autor Udostępnij Opublikowano 11 Lipca 2009 daj to w kamerze: GMLif instance_number(player) = 1 d3d_set_projection(oPlayer1.x+0,oPlayer1.y+1,640,oPlayer1.x,oPlayer1.y,0,0,0,1); Jest coraz lepiej. Teraz kamera przynajmniej się zatrzymuje ale niestety obraz odwraca się do góry nogami :) nadal jest problem z granicami planszy. Gdy bohater dociera do granicy po prostu blokuje go niewidzialna bariera a kamerka i tak pokazuje nieistniejący obszar sceny wypełniony kolorem background ( kamera w ogóle nie uwzględnia rozdzialczości rooma tylko to ze bohater musi być w centrum widocznego obszaru. 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ę