Skocz do zawartości

Amaterasu

Użytkownicy
  • Postów

    390
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Amaterasu

  1. Ten twój generowany świat, z jakich elementów ma się składać? Sporo od tego zależy.
  2. 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.
  3. Amaterasu

    Galeria Grafik

    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
  4. 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.
  5. 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
  6. 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).
  7. 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ę.
  8. Niektórzy robią gry, w których roomy mają rozmiary np. 800x600 i nie przesuwają nigdzie ekranu, pozostali używają viewów
  9. 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_ .
  10. @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
  11. @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
  12. Pociski się nie podkręcają, lecą od początku do końca w linii prostej
  13. http://webm.host/7abe5/ work in progress, grafika absolutnie tymczasowa xd
  14. 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
  15. 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
  16. 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
  17. @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
  18. @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
  19. @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.
  20. 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
  21. 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.
  22. 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
  23. Amaterasu

    Co nowego u was?

    jak ja tu dawno nie byłem trochę mi brakuje tego klimatu sprzed lat, czas szybko leciał na tym forum
  24. Amaterasu

    Warlocks

    Postacie wyglądają jak wklejone, ich kolorystyka kompletnie nie pasuje do tła. Zastosuj jakiś filtr albo coś aby jakoś pozbyć się tego kontrastu.
×
×
  • Dodaj nową pozycję...