XxMichałxX Opublikowano 20 Marca 2009 Udostępnij Opublikowano 20 Marca 2009 Głowię się nad tym jak zrobić niszczenie takie jak w grach typu worms - pocisk czy coś spada i sie takie wgniecenie w ziemi robi, albo kawał ziemi wyżera od wybuchu. To trzeba jakoś zrobić, że ten kawałek sprita który jest w dystansie mniejszym niz np 100 ma sie uciąć, ale jak to zrobić :( ? Z gory thx Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 20 Marca 2009 Udostępnij Opublikowano 20 Marca 2009 Na surface'ach, o ile wiesz, co to jest. PO prostu rysujesz odpowiednie kółka na surface'sie, który jest terenem. Tylko nie rób takiego idiotycznego błędu jak kilku userów, aby zamieniać surface'a na sprite'a - w GMie jest to niewydajne, a w skrajnych przypadkach pojawiają się bugi. Licz kolizje bezpośrednio na surface'sie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Platyna Opublikowano 20 Marca 2009 Udostępnij Opublikowano 20 Marca 2009 Masz na stronie co najmniej jeden przykład. Luknij. Tyle że tam akurat jest chyba zamienianie na sprita. Licz kolizje bezpośrednio na surface'sie. Nie sądzisz ze za dużo od niego wymagasz? To jest misiek :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 20 Marca 2009 Autor Udostępnij Opublikowano 20 Marca 2009 ja tego surfaces w ogole nie pojmuje.. nie da sie tego innaczej zrobic? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 20 Marca 2009 Udostępnij Opublikowano 20 Marca 2009 nie. Dawidds wytłumaczysz mi jak sprawdzić kolizję z surface? =o Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 20 Marca 2009 Udostępnij Opublikowano 20 Marca 2009 Normalnie :D A powiedz mi, wolisz co Stepa (bądź w momencie niszczenia ściany) robić nowego sprite'a :P ? Sposobów na to jest kilka. Najbardziej na chama to po prostu używając surface_getpixel() [oczywiście nie dla każdego pixelu sprite'a]. Metoda i tak nieporównywalnie wydajniejsza od tworzenia nowego sprite'a. ja tego surfaces w ogole nie pojmuje.. nie da sie tego innaczej zrobic?Nie. Ale czekaj... czego można w surface'ach nie pojmować ;/ ? GML Create surf = surface_create(80, 60); Draw surface_set_target(surf); //Od teraz wszystko, co malujemy nie maluje się na roomie, tylko na surface'sie draw_text(5, 5, "lol"); surface_reset_target(); //Koniec malowania na surface'sie. Od teraz malujemy normalnie, "na roomie". draw_surface(0, 0, surf); //nie jestem pewny kolejności argumentów. // Surface'sy mają to do siebie, iż jeśli namalujemy coś na nich RAz, w czasie jednego stepa, to nawet po pół godziny gry to, co namalowaliśmy ciągle będzie na surface'sie. Surface to na Twój rozum taki Paint... :P Ale zaraz zaraz. Coś się pieprzy. Niby lekko widać tekst, ale wokół niego powstają różne dziwne rzeczy ;/ (surface'sy są przechowywane w pamięci karty graficznej, więc w pustej powierzchni surface'a poijawiają się różne obrazy właśnie z karty graficznej. Jeśli będziemy malować gdzieś w GMie linię - mogą się na surface'sie pojawiać linie. Kiedy kiedyś miałem na laptopie GDATĘ, to nawet widziałem na surface'ach jej logo... :P) GML surface_set_target(surf); draw_clear_alpha(c_white, 0); //Ta funkcja zamaluje całą powierzchnię surface'a białym kolorem, o pełnej przeźroczystości. Wiem, że to dziwne, no ale tak jest... :P surface_reset_target(); I drobna uwaga - lepiej nie uzależniać swojej gry od surface'ów. Otóż surface'y są przechowywane w pamięci karty graficznej. A więc, jeśli chcieli byśmy stworzyć surface'a o rozmiarach 10k^2, niewiele komputerów by takie coś udźwignęło. Czy udało się utworzyć surface'a można sprawdzić w prosty sposób: GML if(!surface_exists(surf)){ show_message("Za malo pamieci"); game_end }(zaraz po utworzeniu surface'a) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 21 Marca 2009 Udostępnij Opublikowano 21 Marca 2009 Metoda i tak nieporównywalnie wydajniejsza od tworzenia nowego sprite'a. metodę tworzenia nowego sprite'a można uwydajnić dzieląc większy teren na kawałki. Takie rozwiązanie zastosowane jest w moim JWorms i za bardzonie tnie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 21 Marca 2009 Udostępnij Opublikowano 21 Marca 2009 coś mi się nie widzi sprawdzanie get_pixel :P i nie który z tych "idiotów" pomyśleli o optymalizacji i nie tworzą sprita "co Stepa",ale tylko i wyłącznie w chwili niszczenia terenu (patrz mój przykład :D). Jeszcze robiąc tak jak mówi Jaklub - dzieląc teren na kilka mniejszych części, można stworzyć na prawdę optymalny system :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 21 Marca 2009 Udostępnij Opublikowano 21 Marca 2009 Sposobów na to jest kilka. Najbardziej na chama to po prostu używając surface_getpixel() [oczywiście nie dla każdego pixelu sprite'a]. Metoda i tak nieporównywalnie wydajniejsza od tworzenia nowego sprite'a. Kompletne bzdura. Draw_getpixel (które działa na tej samej zasadzie co surface_getpixel) jest jedną z NAJWOLNIEJ działających funkcji GMa. Jeśli chcemy sprawdzić kolizję z surface, siłą rzeczy musimy przekonwertować cały surface lub jego część w sprite'a. Nie ma na to "kilku sposobów". Poza tym, naczelna zasada odnośnie korzystanie z surfaces - nigdy nie edytuj surface'a w evencie Draw. Umieszczasz tam jedynie instrukcję rysującą surface na ekranie: GML draw_surface(x,y,surf); Właśnie przez ten błąd na surface powstają, jak Ty to ująłeś, "różne dziwne rzeczy". Wycinek z helpa: You should never change the drawing target while you are actually drawing on the screen, that is, never use it in drawing events. This will cause serious problems with the projection and viewport. Następnym razem sprawdź, zanim coś napiszesz, bo niepotrzebnie wprowadzasz ludzi w błąd. 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ę