Kirian Opublikowano 9 Kwietnia 2008 Udostępnij Opublikowano 9 Kwietnia 2008 Witam wszystkich - to jest mój pierwszy post na forum. Tworze grę action RPG - hack and slash dokładniej rzecz ujmując. Poniżej dostępne są screeny z aktualnego etapu. Postacie tworzę (modyfikuję, bo w większości przypadków są to darmowe modele) w 3DS MAX. następnie renderuje i tworze gify w GM`ie. Z tego powodu natknąłem się na kilka problemów i nie bardzo widzę ich rozwiązanie, metoda prób i błędów nie przynosi rezultatów :P 1. GM słabo wycina tło, przez co nie mogę renderować z antyaliasingiem. A to także pozbawia mnie możliwości renderowania efektów specjalnych. Czy są jakieś dokładne metody wycinania tła? Nie wstawiam sprite`ów do GM, tylko wczytuję z zewnątrz, więc proszę o ew. propozycje przykładów w kodzie. Po włożeniu wszystkich grafik do GM`a plik .exe zajmowałby 140MB i ładowałby się kosmicznie długo... 2. Cienie - jest problem z renderowaniem postaci z cieniami, choć może się to uda, ale chciałbym spróbować to jakoś obejść. Na jednym ze screen`ów widać pseudo-cień jaki wstawiłem pod postacią jako oddzielny obiekt. Może można jakoś zduplikować sprite`a i przekształcić go, zaciemnić i zrobić taki Photoshop`owy efeket cienia? 3. To jest największy problem i na ile pozostałe jeszcze strawię, na tyle ten bardzo chciałbym jakoś rozwiązać. Chodzi o kolizje (screen z kowalem). Próbowałem już różnych funkcji odpowiedzialnych za kolizje i zawsze problem wygląda podobnie. Sterowanie w mojej grze wygląda następująco: W Global Mouse Button: if((abs(gracz.x-mouse_x))<=30 && (abs(gracz.y-mouse_y)<=30)) {speed=0;} else {mp_potential_step(mouse_x, mouse_y, 3, false); speed=3;} I tak jeśli podejdę do kowala, to postać w pewnym sensie się od niego odbija lub zatrzymuje, ale jest możliwość "zaplątania" się w niego. Jak zrobić aby postać podeszła do kowala na pewną odległość i nie poszła ani kawałek dalej. Próbowałem dołożyć maskę do kowala i na jej podstawie rozpatrywać kolizje, lecz nic to nie dało. Z góry dziękuję za odpowiedzi i przepraszam, jeśli gdzieś są rozwiązania tych problemów, a ja ich nie znalazłem. Pozdrawiam każdego komu się chciało to wszystko przeczytać ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 9 Kwietnia 2008 Udostępnij Opublikowano 9 Kwietnia 2008 1./2. Nie znam sie na grafice 3. Najprostszym (i najgłupszym) sposobem jest zrobienie niewidzialnego obiektu z którym gracz będzie kolidował. Możesz też zrobić GML if distance_to_object(gracz)=< iles than speed=0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 9 Kwietnia 2008 Udostępnij Opublikowano 9 Kwietnia 2008 Do kolizji proponuje użycie masek. @Mimek: I do każdego obiektu twożyć specjalnie nowy?? o_O 2x wiecej obiektów = 2x mniejszy FPS Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
CuB3 Opublikowano 9 Kwietnia 2008 Udostępnij Opublikowano 9 Kwietnia 2008 Ad. 2) Rysowanie tego samego sprite na innych pozycjach... Niby cień... GML Draw Event: draw_sprite_ext(sprite_index,image_index,x+pozycja_cienia,y+pozycja_cienia,image_xscale,image_yscale,image_angle,c_black,prześwit_cienia(od0do1); draw_sprite(sprite_index,image_index,x,y); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kirian Opublikowano 6 Maja 2008 Autor Udostępnij Opublikowano 6 Maja 2008 Jeśli chodzi o kolizje to działają one już akceptowalnie... Kolidują bounding boxy i gracz odbija się od obiektów, nie mogłem dać speed=0 w przypadku kolizji, ponieważ postać nadal zaplątywała się w inny obiekt i ciężko nią było ruszyć w jakimkolwiek kierunku :/ Natomiast cienie działają całkiem ładnie, dzięki CuB3. Nie są one idealne, ponieważ nie zawsze nadążają za obiektem - efekt a`la Lucky Luke ;) Zastosowany kod w STEP EVENT to: x=gracz.x; y=gracz.y; draw_sprite_ext(gracz.sprite_index,-1,x+3,y-3,-1,-1,150,c_black,0.3); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
M@ti002 Opublikowano 7 Maja 2008 Udostępnij Opublikowano 7 Maja 2008 Czy są jakieś dokładne metody wycinania tła? owszem. :) sprobuj z: GML draw_set_blend_mode(bm_add) //rysowanie efektu draw_set_blend_mode(bm_normal) ale bardziej proponuje to: https://gmclan.org/index.php?czytajart=47 ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 7 Maja 2008 Udostępnij Opublikowano 7 Maja 2008 @Kirian: zrobiłeś osobny obiekt? Na cholerę? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kirian Opublikowano 8 Maja 2008 Autor Udostępnij Opublikowano 8 Maja 2008 Nie bardzo rozumiem to pytanie Yoda, ale jesli chodzi tu o cienie, to na początku zrobiłem obiekt oddzielny, natomiast aktualnie wszystko znajduje się w DRAW obiektu gracz. W STEP przeciwnika mam taki kod: sprite_index=szkielet_stoi_1; if (image_index==16) {atak=1;} walka=0; Gdy atak=1 zadawane są obrażenia. Po przeniesieniu tego kodu do DRAW i odpowiednich zmianach, nie działa część: if(image_index==16) Jak sprawdzić czy jest określona klatka animacji, jeśli do wyświetlania sprite`a używa się: draw_sprite(szkielet_stoi_1,-1,x,y); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 8 Maja 2008 Udostępnij Opublikowano 8 Maja 2008 może draw_sprite(sprite,image_index,x,y)? o to chodzi? Nie bardzo rozumiem to pytanie Yoda, ale jesli chodzi tu o cienie, to na początku zrobiłem obiekt oddzielny, natomiast aktualnie wszystko znajduje się w DRAW Tak chodziło mi o cienie - jak dla mnie to był bezsens robić niepotrzebne obiekty. PS używaj znaczników [ gml ] [ /gml ] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 8 Maja 2008 Udostępnij Opublikowano 8 Maja 2008 Co do cieni, zrobiłem z nudów renderowanie ich na surfaceach ;p https://gmclan.org/up1717_11_Shadow.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kirian Opublikowano 9 Maja 2008 Autor Udostępnij Opublikowano 9 Maja 2008 Zazwyczaj do wyświetlenia sprite`a używa się: GML sprite_index=szkielet_stoi_1; W takim wypadku, aby przypisać do konkretnej klatki animacji jakieś wydarzenie, wystarczy użyć: GML if(image_index==16) Natomiast, jeśli do wyświetlania sprite`a używa się: GML draw_sprite(szkielet_stoi_1,-1,x,y); To jak napisać powyższy warunek? Bo z tego co widziałem, to po przeniesieniu kodu właśnie ten fragment nie działa, wyskakuje błąd "unknown variable image_index", czy coś podobnego... 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ę