
Amaterasu
Użytkownicy-
Postów
390 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez Amaterasu
-
Proceduralne tworzenie świata gry
Amaterasu odpowiedział(a) na Sutikku temat w Pytania zaawansowanych
Ten twój generowany świat, z jakich elementów ma się składać? Sporo od tego zależy. -
30000x30000 = 9*10^8 9*10^8*8 = 7,2*10^9 ~~ 7 GB tyle zająłby surface 30000x30000 na karcie graficznej przy optymistycznym założeniu, że karta graficzna nie zamieniłaby wymiarów na 32768*32768 już lepszym pomysłem są tilesety możesz też zrobić tak, że znając położenie poszczególnych tilesów w roomie (np. korzystając z ds_listów lub z ds_grida) i położenie viewu w roomie, rysujesz fragmenty poszczególnych backgroundów prosto na surface o wielkości okna, w ten sposób pozbędziesz się tilesów w roomie (co oczywiście utrudni projektowanie rooma i ułożenia backgroundów, do tego trzeba by zrobić własny edytor albo ustawiać wartości ręcznie) i zyskasz na wydajności, a do tego miałbyś kontrolę nad tym, jakie grafiki są obecnie załadowane w grze, bo jest możliwość dynamicznego tworzenia i usuwania backgroundów.
-
Rób to, co twórca Prince of Persia i przerysowuj animacje z jakiegoś filmu (on nagrał bieg własnego brata), to pomaga przy nauce animacji. Moje uwagi: -Ostatnia klatka nie przechodzi płynnie w pierwszą, widać szarpnięcie na końcu loopa -Nie widać zmiany "nogi wiodącej", przez co wydaje się, jakby koleś biegł konikiem w bardzo dziwny sposób -Grafika kolesia jest całkiem niezła
-
w życiu nie robiłem tego typu testów GameMaker jest skrojony na miarę gier, których grafika składa się z małych obrazków (jest tak nawet napisane w manualu, razem z uwagą, żeby sprite'y były tak małe, jak tylko to możliwe). Jestem jednak przekonany, że o ile nie rysujesz jakiejś niesamowitej ilości dużych obrazków naraz, to spadek wydajności nie będzie na tyle widoczny, aby wymusić uproszczenie mechaniki gry, jeżeli o to ci chodzi. Sprawdź, ile fps-ów wyciągnie twoja gra z tymi tilesami i miej tę liczbę na uwadze przy wprowadzaniu nowych elementów gry.
-
ugh, 1500x1500... probowałbym użyć draw_background_part jeżeli to możliwe, w jakiś sposób znajdować odpowiednie współrzędne backgrounda do rysowania rysowanie ponad połowy backgrounda poza obszarem rysowania to spora strata czasu tzn. jeżeli tilesy mają mniejsze rozmiary niż 1500x1500, to nie będzie specjalnego problemu jeśli to one mają takie rozmiary, to ten background, który wczytujesz, musi być naprawdę spory, choć przy współczesnych parametrach, jakie mają karty graficzne, to nie ma obawy o brak miejsca na karcie graficznej
-
O ile nie masz zamiaru wyświetlać tysiąca obrazków o rozmiarze 800x600 tysiąc razy na sekundę, nie będzie jakiegoś wielkiego problemu. Ja np. w każdym projekcie używam sporej ilości surface'ów różnych rozmiarów i nie doświadczam spowolnień (raczej przyspieszenia, bo nie potrzebuję rysować obiektów w każdej klatce od nowa).
-
Walnij w jakimś obiekcie draw_text(0,0,instance_count) w evencie Draw GUI. Pokaże ci, ile obiektów jest w tej chwili aktywnych w roomie. Czy używasz tilesetów? Kiedyś gra mi spowalniała, gdy było dużo tilesetów (wystarczyło, że były we wcześniejszych roomach), ale to było jeszcze w GM 7.0 Rysowanie wielu rzeczy naraz, nawet jeżeli tylko w jednym obiekcie, również spowalnia grę.
-
Niektórzy robią gry, w których roomy mają rozmiary np. 800x600 i nie przesuwają nigdzie ekranu, pozostali używają viewów
-
Jeśli chcesz mieć sensowną wydajność (tzn. więcej niż 0.5 FPS), nie da rady zrobić tego efektu bez shaderów. Na szczęście z internetu można pobrać gotowe shadery, są tam też tutoriale, jak z nich korzystać. ...Jeżeli bardzo, BARDZO nie lubisz shaderów, możesz zamiast tego w prosty sposób zrobić efekt odwrócenia kolorów bez żadnych shaderów: GML draw_set_color(c_white) //ważne draw_set_blend_mode_ext(10,1) //krótko: wszystko, co namalowane na biało w tym trybie odwróci kolory tego, na czym jest rysowane draw_rectangle(view_xview,view_yview,view_xview+view_wview,view_yview+view_hview,0) //zamalowujemy cały ekran na biało draw_set_blend_mode(bm_normal) //wracamy do normalnego trybu rysowania Należy to wrzucić do eventu Draw End w jakimś obiekcie i upewnić się, że będzie wywołany tylko raz w każdej klatce Ten kod działa, gdy korzystasz z viewów. Jeśli z nich nie korzystasz, to używasz współrzędnych (0,0,room_width,room_height) zamiast view_ .
-
@up co zmierzyłem ilość zajętej pamięci RAM i VRAM przed i po stworzeniu surface 1000x1000 VRAM przed i po była taka sama RAM zwiększył się o 3940 kB (nieco więcej niż 4M bajtów) każdy kolejny surface zwiększał ilość zajętego RAM-u o ok. 4 MB, VRAM nie zmieniał się EDIT: cofam, co napisałem VRAM rośnie o 8 MB przy każdym surface, na którym się coś rysuje czyli 8 bajtów na piksel w VRAM + 4 bajty na piksel w RAM sorry
-
@I am vader: google by pomogło : P Panel sterowania -> Opcje zasilania -> Zmień ustawienia planu -> Zmień zaawansowane ustawienia zasilania -> Wymagaj hasła przy wznawianiu, zaznacz obie opcje na "Nie" Alternatywny sposób: Menu Start -> wpisz "netplwiz" -> odznacz opcję "Aby używać..." Ciekawe, u mnie jest zajęte 4 bajty na piksel
-
@I am vader: jaki system?
-
Pociski się nie podkręcają, lecą od początku do końca w linii prostej
-
http://webm.host/7abe5/ work in progress, grafika absolutnie tymczasowa xd
-
Nakładanie się obiektów na siebie
Amaterasu odpowiedział(a) na Sutikku temat w Pytania początkujących
Po mp_potential_step użyj place_meeting() aby sprawdzić, czy nie wlazł na jakiś inny obiekt, jeśli tak, to xprevious i yprevious Robię to samo w tym właśnie momencie -
możesz to zrobić ręcznie w Inkscape dla każdego obrazka (wektoryzacja bitmapy), zapisać wynik w jakimś wygodnym formacie i wczytać wektory do GM-a nieco szerzej o wektoryzacji: Inkscape korzysta z silnika Potrace, który mając podaną bitmapę i parametry, wypluwa zbiór wektorów, który można zapisać w dowolnym formacie wektorowym wektoryzacja to nie jest łatwa sprawa, robienie tego w locie nie ma większego sensu - najlepiej jest zwektoryzować wszystkie bitmapy na samym początku, zmodyfikować wektory ręcznie, dopiero potem wrzucić do gry
-
uch, pisanie fizyki w programie, który ma gotowy silnik fizyczny jeśli chcesz robić odbijanie od jakiegoś nieregularnego sprite'a, to funkcja move_bounce_solid/all() może być tym, czego szukasz
-
@MaxGaming: czasem, jak nie wiem, co jest nie tak, używam show_message tuż przed niedziałającym kodem, aby sprawdzić, jaką wartość ma zmienna tuż przed wykonaniem kodu walnij show_message(KEY_LEFT[argument0])) tuż przed ifem, który z tego korzysta i sprawdź, co wychodzi
-
@3r3se7ven: już sprawdziłem, wydajność jest identyczna @MaxGaming: to co miałeś było od początku dobrze, coś innego powoduje, że kod nie działa. Zamiast: GML globalvar a,b; a[0] = liczba b[0] = liczba spróbuj: GML global.a = 0 global.a[0] = liczba global.b = 0 global.b[0] = liczba i zamiast keyboard_check_pressed(b[0]), keyboard_check_pressed(global.b[0]), może teraz zadziała
-
@3r3se7ven: nie w Gamemakerze, tutaj każda liczba jest traktowana jako liczba 64-bitowa, więc nieważne, co przez co mnożysz. Nawet gdyby mnożenie przez 1 było szybsze niż 1,61803..., to zmniejszenie dzięki temu liczby obiektów będzie nieporównywalnie bardziej optymalne.
-
można było najpierw pobrać darmową wersję, żeby sprawdzić, czy będzie w ogóle działać według licencji (dane z 2011 roku, możliwe, że już nieaktualne), można w danym momencie korzystać tylko z trzech GM:Studio na jednym kluczu, natomiast nie ma limitu instalacji GM:Studio, póki poprzednie zostały poprawnie odinstalowane
-
Z tego co pamiętam, rozciąganie obiektu za pomocą image_xscale/yscale rozciąga też maskę, a zatem i obszar kolizji w tym obiekcie, natomiast nie dzieje się tak z image_angle.
-
nie ma takiej funkcji jeżeli zderzają się dwie kule, to możesz łatwo znaleźć miejsce ich styku, bo znajduje się dokładnie na linii między ich środkami jeśli szukasz miejsca przecięcia dwóch linii, to można wyprowadzić sobie miejsce przecięcia z układu równań jeśli chcesz zrobić laser, to w moim uploaderze powinien być skrypt na to
-
jak ja tu dawno nie byłem trochę mi brakuje tego klimatu sprzed lat, czas szybko leciał na tym forum
-
Postacie wyglądają jak wklejone, ich kolorystyka kompletnie nie pasuje do tła. Zastosuj jakiś filtr albo coś aby jakoś pozbyć się tego kontrastu.