Skocz do zawartości

SimianVirus7

Użytkownicy
  • Postów

    262
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    30

Ostatnia wygrana SimianVirus7 w dniu 3 Marca

Użytkownicy przyznają SimianVirus7 punkty reputacji!

2 obserwujących

O SimianVirus7

  • Urodziny 15.11.1997

Informacje

  • Użytkownik GameMaker Studio 2
    Tak
  • Użytkownik GameMaker Studio
    Tak
  • Użytkownik GameMaker 8
    Tak
  • Użytkownik GameMaker 7 i wcześniejszych wersji
    Nie
  • Użytkownik Unity
    Nie
  • Użytkownik Godot
    Nie

O mnie

Ostatnie wizyty

8381 wyświetleń profilu

Osiągnięcia SimianVirus7

  1. Dziękuje za miły odzew. Zaktualizuje zatem parę rzeczy i wstawię na nowo, na razie z wyświetleń i tak nic nie stracę 😆 No teraz to się trochę zdziwiłem. Już tak z przyzwyczajenia chyba nie zauważyłem tego faktu. Pewnie, że tak. Miałem zamiary zrobić też lektora po polsku, ale nie wiem czy to nie będzie przerost formy nad treścią, może same napisy by jednak wystarczyły. Z drugiej strony taka właśnie forma narracyjna sprawia, że nagranie polskiego głosu nie byłoby trudne.
  2. Postanowiłem zrobić poradnik dość ciekawego efektu destrukcji otoczenia, coś a la wormsy. Nie wiedziałem, że tworzenie poradnika jest takie stresujące i czasochłonne. Zanim opublikuje go na YT chciałbym poznać waszą opinię: - ogólna jakość poradnika - merytoryka - mój angielski którym ostatni raz porozumiewałem się z moją panią od angielskiego w technikum parę lat temu (wymowa typu "egzampul, ziroł, du dis.). Są napisy dla tych którzy wyłączą dźwięk ale nadal chcieliby obejrzeć. (Odkąd usłyszałem swoją wymowę to przestaje się śmiać z hindusów na YT) Po obejrzeniu go zrozumiałem, że to bardziej narracja tego co robię niż typowy poradnik, ale może akurat taka forma wypadnie dobrze. (dorobię polskie napisy jeśli będzie zielone światło)
  3. Dużo napracowanka. Przyznaje, nie kupiłem, ale komentarz zostawiłem. Choć zastanawiam się, bo dużo spójnie narysowanych postaci, a ja w swoich dungeon crawlerze mam wszystko z innej parafii.
  4. Gra faktycznie mocno trudna. Horda przeciwników przenikający przez ściany, mrówki koloru czarnego na czarnym tle strzelające rakietami, no i ten przerażający gość, który ma mnie na strzała: No ale da się odpalić na windows 11, także plus. Trochę uciążliwe jest ciągłe klikanie myszką, ja bym zmienił na zwykłe przytrzymanie.
  5. Zrobiłem surface o wymiarach x4 i przeskalowałem w dół i faktycznie daje to zamierzony efekt. Pytanie jak bardzo wpływa to na wydajność, bo jeden surface ok, ale jak się ma takich kilka? Będę chyba musiał wymyślić coś innego. Próbowałem, to samo 😕 Zrobiłem surface_get_width/height(application_surface) i dało wymiar Viewport Properties (okno wyświetlania gry) czyli 1920x1080, a room i camera ma 960x540 🤔 Czyli faktycznie application_surface ma 2 razy bardziej zagęszczone pixele i pewnie przez to nie przeskakują... taki antyaliasing EDIT: Tak, kiedy zmienię wszystko na jednakową wartość, czyli 1920x1080 i application_surface ma zagęszczenie 1:1 to piksele też przeskakują 🙂
  6. Tak, zapomniałem dodać, że w opcjach mam odhaczoną opcję "Interpolate colours between pixels" ze względu na pixelart. W Twoim przykładzie jest ta sama sytuacja, kiedy ją odhaczę. Gdzieś czytałem, że to ze względu, że application_surface jest rysowana w większej rozdzielczości i skalowana do niższej. Nie wiem na ile to prawda i jak to faktycznie miało by działać i dlaczego akurat w ten sposób. Kod w tym wyjaśnieniu był mniej więcej taki (nie mogę tego teraz znaleźć): draw_surface_ext(application_surface,0,0, 0.5, 0.5,0,c_white,1); - gdzie 0.5 to xscale/ysclae; Zabawnie robi się wtedy, kiedy surface utworze o wymiarach spritu (sprite'u?... duszka? 😄) i obracam całym surface, a nie spritem. Wtedy przeskakiwanie pikseli nie występuje, a zachowuje się tak samo jak na application_surface.
  7. Zrobiłem nowy surface o wymiarach pokoju i rysuje sprite na x/y. Obracając nim pixele przeskakują, gdzie na application surface tego nie robi [gif podglądowy]. Gra startuje w rm_init o właściwościach: Room Settings: 1920x1080 Camera Properties: 1920x1080 Viewport Properties: 1920x1080 Po czym przechodzi na właściwe pokoje o właściwościach: Room Settings: 960x540 Camera Properties: 960x540 Viewport Properties: 1920x1080 Zmiana rm_init na te same wartości co wszystkie pozostałe daje ten sam efekt 😕 Próbowałem coś z aa_display, gpu_set_texfilter ale albo wywalało cały surface, albo rozmazywało wszystkie sprity. (faktycznie dość słaba jakość tego gifa, ale na rękach - niebieskich plamach, widać o co mi chodzi. Po lewej piksele przeskakują, a po prawej nie) Kod surface: //surf = surface_create(room_width, room_height); // -> w create event surface_set_target(surf) draw_clear_alpha(0,0) draw_sprite_ext(sprite_index, image_index, x, y, 1, 1, image_angle, c_white, 1); surface_reset_target(); draw_surface(surf,0,0);
  8. Miałem robić tą grę na konkurs, ale tak mi się nie chciało, że postanowiłem uderzyć w końcu w shadery i trochę się ich poduczyć. To mój trzeci i jak na razie jestem bardzo zadowolony. - można wybrać barwę - próg koloru - próg blendowania / przejścia pomiędzy kolorem a skalą szarości.
  9. Oszem, według mojej wiedzy jest zasobożerne. Ja znalazłem na to dwa rozwiązania w swoim projekcie. a) zmiana collision_circle na collision_rectangle - Wiem, że nie zawsze jest to możliwe, ale np. jeśli robisz pole widzenia przeciwnika, to czy circle czy rectangle, efekt jest bardzo do siebie podobny. ( u mnie przy 100 obiektach to uzyskanie 1000fps więcej... dużo.) b) To co najbardziej zwiększa wydajność, to przerzucenie tej funkcji na ten "konkretny typ obiektu" który ma Ci znaleźć. Przykład: - masz 100 przeciwników którzy patrolują teren i sprawdzają czy widzą obiekt gracza np. oPlayer, a więc masz 100 razy collision_circle. Możesz odwrócić sytuacje i to graczowi dać collision_circle czy widzi przeciwników, jeśli tak, zrób np. oEnemy.widze_gracza = true; Wtedy collision_circle występuje tylko 1 raz; Pamiętaj, że zawsze możesz zrobić rodzica obiektów, np. nie musisz pisać collision_circle_list(x, y, 100, oEnemy1); collision_circle_list(x, y, 100, oEnemy2); collision_circle_list(x, y, 100, oEnemy3); collision_circle_list(x, y, 100, oEnemy4); tylko wrzucić jako child do pustego obiektu, np. oEnemies i wtedy collision_circle_list(x, y, 100, oEnemies); PS: Listę tworzymy w create, jeśli damy to w innym miejscu, step czy draw, będzie się ona tworzyć bez końca aż zapełni całą pamięć RAM. Tworzenie jej w step i od razu niszczenie jej przy pomocy ds_list_destroy(), kiedy już zrobi swoje, też negatywnie wpływa na fps;
  10. Wróciłem do robienia dinozaura z bronią po dłuższej przerwie. Chciałem najpierw zrobić krótkie zestawienie co od tamtej pory zakodowałem, ale dzisiaj zrobiłem możliwość podpalenia dosłownie każdego obiektu w grze i jestem na tyle zadowolony, że się pochwalę (tak, wiem o dropie fpsów) DUG_iseeworlonfire.mp4
  11. tak tak, problem mam z tym, że ja w funkcji nie wiem jaka jest nazwa tej zmiennej w instancji. Niektóre mają sndPlayer a inne inaczej, dlatego chciałbym przesyłać odwołanie do zmiennej. Odwołanie, a nie przypisanie, bo chciałby też wiedzieć kiedy ta zmienna jest wykorzystywana (audio_is_playing). No nie potrafię tłumaczyć albo za dużo wymyślam
  12. O! Bardzo prawdopodobnie, że tego właśnie szukałem. Robiłem też return sound_player zamiast true, ale to nic nie dało. Na razie zrobiłem to po normalnemu, czyli tak jak Gnysek napisał, ale chciałem to sobie zrobić bardziej elastycznie. Prościej mówiąc, chcę uniknąć pisania za każdym razem if(!audio_is_playing(sndPlayer)) a dodatkowo kiedyś też miałem problem właśnie z tym przesyłaniem zmiennych, gdzie zmienna w funkcji i instancji miała być tą samą.
  13. Nie wiem jak o to zapytać w googlach po angielsku, więc zapytam na gmclanie po polsku. Jak przesłać odwołanie do adresu zmiennej w pamięci a nie przypisanej wartości do funkcji. np. mam w obiekcie create: sndPlayer = 1; //to ma robić coś w deseń Sound Instance ID step: play_sound(sndSound1, 1, 1, sndPlayer); a w funkcji: function play_sound(snd, gain = 1, pitch = 1, sound_player = -1) { if(sound_player != -1) if(!audio_is_playing(sound_player)) {sound_player = audio_play_sound(snd, 1, false, gain,0, pitch); return true;} } No to i tak odtwarza dźwięk co klatkę, zamiast czekać aż się zakończy, bo pewnie przesyła wartość zmiennej czyli 1. Jak zrobię na sztywno, czyli tak: function play_sound(snd, gain = 1, pitch = 1) { if(!audio_is_playing(sndPlayer)) {sndPlayer = audio_play_sound(snd, 1, false, gain,0, pitch); return true;} } No to działa elegancko. Chyba, że gmlu czegoś takiego nie ma, bo z tego co kojarzę to jakieś pointery to w c++ są Nie chce robić zmiennych globalnych, bo wiele obiektów ma zmienną sndPlayer. Szukam czegoś w stylu get_variable_address(sndPlayer)
  14. draw_set_halign(fa_left) // wypisuje od lewej, nie będzie rozjeżdżania ewentualnie var _offset = string_width(Global.local_question)/2 //pobierz szerokość wypisanego tekstu draw_set_halign(fa_center) draw_text(x + _offset, y, Global.local_question);
  15. Potrząśnie się słabo i zatrzyma. Generalnie miało to tak wyglądać ale teraz wpadłem na pomysł, że w sumie mogę zrobić X na kursorze i uniemożliwić wyrzucenie.
×
×
  • Dodaj nową pozycję...