I am Lord Opublikowano 22 Sierpnia 2022 Udostępnij Opublikowano 22 Sierpnia 2022 Ktoś wie jaka może być przyczyna tego że Tileset ustawiony w room editorze nie zgrywa się z tym który się wyświetla w grze? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Sierpnia 2022 Udostępnij Opublikowano 23 Sierpnia 2022 Już nie ważne, okazało się że restart IDE pomogło. Na następny dzień błąd się naprawił. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 25 Sierpnia 2022 Administratorzy Udostępnij Opublikowano 25 Sierpnia 2022 @I am Lord Widziałem wczoraj dokładnie ten sam błąd opisany na angielskim discordzie gamemakerowym i wygląda, że to nie był przypadek - aktualizuje się sprite, ale nie tileset. Rozwiązaniem jest podobno zaznaczenie checkboxa w tilesecie (disable sprite export) i potem ponowne zaznaczenie. Błąd jest zgłoszony, ale stabilna dostaje chyba wydanie we wtorek/środę, więc może być ciężko z naprawieniem tego przed 2022.8, trafi pewnie do bety za tydzień i do 2022.9 oraz LTS. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 27 Sierpnia 2022 Udostępnij Opublikowano 27 Sierpnia 2022 Widzę że ze spritami jest to samo. Nie modyfikowałem sprite w edytorze w IDE a w grze jest nadal stary. Restart pomógł dopiero. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Sierpnia 2022 Administratorzy Udostępnij Opublikowano 29 Sierpnia 2022 Może zamiast checksumy sprawdzają rozmiary obrazka ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 29 Sierpnia 2022 Udostępnij Opublikowano 29 Sierpnia 2022 Miało tam być że zmodyfikowałem a nie (nie modyfikowałem). A błąd się pojawił jak kliknąłem kompilację i gdzieś tam w jej trakcie przerwałem bo coś na szybko zauważyłem. Z tilesetem też tak zrobilem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 9 Września 2022 Udostępnij Opublikowano 9 Września 2022 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) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Września 2022 Administratorzy Udostępnij Opublikowano 9 Września 2022 Nie bardzo rozumiem co to ma do rzeczy ze wskaźnikami audio_is_playing przyjmuje albo ID dźwięku, albo id instancji dźwięku, zwróconej przez audio_play_sound. W twoim (pierwszym) kodzie: snd => id assetu dźwięku sound_player => id instancji odtwarzania dźwięku Może chodzi Ci o efekt, który uzyskasz pisząc: if(!audio_is_playing(sound_player) and !audio_is_playing(snd)) Btw. domyślnie nie zalecam ustawiania wartości 1. Najlepiej "undefined". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 11 Września 2022 Udostępnij Opublikowano 11 Września 2022 Jak dla mnie wygląda to na shadowing zmiennych, puszczasz wartość `-1` w argumentach: function play_sound(snd, gain = 1, pitch = 1, sound_player = -1) <--- tutaj Definiujesz to jako zmienną lokalną funkcji (nie instancji), a potem zamieniasz jej wartość tutaj: sound_player = audio_play_sound Wygląda mi to na zwyczajny shadowing, a ta zmienna ma scope funkcji a nie instancji w której ta funkcja jest odtwarzana, zwyczajnie `sound_player` zawsze jest `-1` (zakładając, że podstawiasz do niej wartość -1 z innej zmiennej podczas jej wywołania, bądź pozostawiasz argument "pusty", który jest zastępowany wartością domyślną, `-1`). Pewnie szukasz czegoś w rodzaju: variable_instance_set (yoyogames.com) variable_instance_get (yoyogames.com) Ewentualnie po prostu zwracaj ID (wartość po wywołaniu audio_play_sound) odtworzonego dżwięku zamiast posiłkować się taką "adresacją". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 12 Września 2022 Udostępnij Opublikowano 12 Września 2022 Cytat Pewnie szukasz czegoś w rodzaju: variable_instance_set (yoyogames.com) variable_instance_get (yoyogames.com) 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ą. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Września 2022 Administratorzy Udostępnij Opublikowano 12 Września 2022 Ale jak każda instancja ma inny dźwięk, to jego id w zmiennej zupełnie wystarczy - wywołując skrypt np. za pomocą with() możesz ustawić kontekst instancji z której kod się wykona i wtedy "widzi" jej lokalne zmienne, nie trzeba ich przekazać w argumencie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 13 Września 2022 Udostępnij Opublikowano 13 Września 2022 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Września 2022 Administratorzy Udostępnij Opublikowano 13 Września 2022 Dobra, teraz zrozumiałem. Np. obj_a ma zmienną sndPlayer, a obj_b ma zmienną sndEnemy i chcesz odtwarzać właśnie je, ale zawsze mają inne nazwy. Tyle, że tę nazwę też gdzieś musisz przetrzymywać (np. sndVariabke = "sndEnemy"), więc chyba lepiej po prostu ujednolicić nazwę zmiennej Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 9 Maja 2023 Udostępnij Opublikowano 9 Maja 2023 Mam pytanie z innej beczki, otóż posiadam kod ekwipunku, czyli rysowanie slotów, oraz przenoszenie przedmiotów, łączenie ich itp. Jednak napisałem kod w DrawGui zamiast step, jak bardzo może wpłynąć to na grę? Oczywiście kod działa tylko po kliknięciu myszą oraz gdy EQ jest włączone. Pozdrawiam PS. Tak wiem, że kod powinienem przenieść do stepa, bo on obsługuje logikę gry i jest wykonywany co ilość klatek, a Draw jest do rysowania, bo wykonywany jest ciągle, jednak ciekawi mnie to, zanim napiszę kod od nowa przenosząc do StepEvent Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Maja 2023 Administratorzy Udostępnij Opublikowano 10 Maja 2023 12 godzin temu, H2S04 napisał(a): Jednak napisałem kod w DrawGui zamiast step Ja zazwyczaj też tak robię, chociaż faktycznie logikę lepiej byłoby mieć w Step. Z mojego jednak doświadczenia, skoro nie masz tego kodu w step, to even step wykona się o tyle szybciej, a draw o tyle samo dłużej Możesz użyć profilera w debuggerze, albo zwykłego show_debug_overlay, żeby zobaczyć jaki to ma wpływ na FPS - może się okaże, że masz całkiem spory zapas (spory zapas przy grze 60FPS to znaczy, że wspomniana funkcja pokazuje tak z 300-400FPS). Tak naprawdę, w najnowszych wersjach języka GML, zamiast rozdzielać kod na step/draw, lepiej już napisać strukturę-konstruktor, która ma w sobie statyczne funkcje draw/step i je wywoływać w jakiejś instancji. Zaletą tego rozwiązania jest, że można sobie wtedy różne własności GUI (jak wybrany element, pozycję kursora/obwódki, podświetlenia elementów itp.) zapisać w takiej strukturze jako wewnętrzne zmienne, które nie przeszkadzają instancji (można użyć tych samych nazw) i które wtedy łatwiej używać (step wylicza zmienne dla draw). 12 godzin temu, H2S04 napisał(a): Tak wiem, że kod powinienem przenieść do stepa, bo on obsługuje logikę gry i jest wykonywany co ilość klatek, a Draw jest do rysowania, bo wykonywany jest ciągle Nie do końca prawda. Jeśli gra ma 60 FPS, to znaczy, że masz 60 razy wykonany event step a po nim event draw. Oba są wykonane 60 razy, w GM nie ma tak, że przeskakuje klatki i wtedy będzie więcej stepów. Dlatego tak niepopularny w GM jest delta timing, bo gdyby ten rozjazd był z automatu, trzeba by w każdej grze go używać, nawet w Catch the Clown. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Chell Opublikowano 10 Maja 2023 Autor Filar Społeczności Udostępnij Opublikowano 10 Maja 2023 2 godziny temu, gnysek napisał(a): Jeśli gra ma 60 FPS, to znaczy, że masz 60 razy wykonany event step a po nim event draw. Oba są wykonane 60 razy, w GM nie ma tak, że przeskakuje klatki i wtedy będzie więcej stepów. Dlatego tak niepopularny w GM jest delta timing, bo gdyby ten rozjazd był z automatu, trzeba by w każdej grze go używać, nawet w Catch the Clown. delta timing rozwiązuje też inny problem - jeżeli Twoja gra ma chodzić w 60 fpsach, a komputer gracza faktycznie doi 15 klatek na sekunde, i nie masz poprawki na delta timing, to gracz gra w slow mo - pocisk wroga który leciałby 1s leci 4s itd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Czerwca 2023 Udostępnij Opublikowano 20 Czerwca 2023 Nie ma już funkcji która zwracała ilość dotknięć ekranu? Jak to teraz wygląda na androidzie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Czerwca 2023 Administratorzy Udostępnij Opublikowano 20 Czerwca 2023 12 minut temu, I am Lord napisał(a): Nie ma już funkcji która zwracała ilość dotknięć ekranu? W jakim sensie dotknięć? Ile obecnie miejsc jest wciśnięte? Obstawiam takie coś: var _cnt = 0; for(var i = 0; i < 5; i++){ if (device_mouse_check_button(i, mb_left)) _cnt++; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Czerwca 2023 Udostępnij Opublikowano 20 Czerwca 2023 I tak było zawsze? To może źle pamiętam i sam sobie taką funkcję napisałem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Czerwca 2023 Administratorzy Udostępnij Opublikowano 20 Czerwca 2023 Nie kojarzę nic innego z GMS1. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 24 Marca Udostępnij Opublikowano 24 Marca EDIT 2: Ogólnie, kamera się popsuła i zaczęła mi wywalać czarne pasy po bokach ekranu, więc po prostu zmodyfikowałem End Stepa, by przy wykryciu zmiany rozmiaru okna zmienił wielkość kamery oraz zmienił rozmiar, app_surface. Wszystko działa poprawnie, jednak dalej trzeba zmaksymalizować okno (GM na to nie pozwala, trzeba dodać plik dll który by to wykonał) EDIT: Dobra... Widzę gdzie jest problem... Gra uruchamia się w oknie, ale jest nie dopasowane do ekranu, po wciśnięciu dopasowania (wypełnienia jak kto woli :P) do ekranu (kwadracik), wszystko się naprawia -.-. Matko, a ja już 3 kamerę piszę... przynajmniej ją skróciłem o 3/4 z funkcją window_set_showborder(false); też wszystko się naprawia 😪 Witajcie, mam problem z GUI, a mianowicie skalowanie... Otóż, na fullscreenie koordynaty rysowania oraz myszy się zgadzają, po wyłączeniu fullscreena pozycja myszy z GUI się nie zgadza... Nie ważne jakiej funkcji do ustalania wielkości Gui użyję, koordy się nie zgadzają.. (Próbowałem display_set_gui_size(Window_Width, Window_Height); // display_set_gui_size(window_get_width(),window_get_height()); // display_set_gui_size(view_wport[0], view_hport[0]); // teraz pytanie gdzie jest problem, szukam w google i nie mogę ogarnąć problemu) Kamerę tworzę bezpośrednio w roomie i w alarmie skaluję GUI. // create Window_Width = 1920; Window_Height = 1080; Cam_Scale = 1; Cam_W = Window_Width / Cam_Scale; Cam_H = Window_Height / Cam_Scale; FullScreen = false; move = true; alarm[0] = 1; surface_resize(application_surface,Window_Width,Window_Height); window_set_size(Window_Width,Window_Height); window_center(); view_enabled = true; view_visible[0] = true; view_xport[0] = 0; view_yport[0] = 0; view_wport[0] = Cam_W; view_hport[0] = Cam_H; view_camera[0] = camera_create_view(0, 0, view_wport[0], view_hport[0], 0, o_Player, -1, -1, Cam_W/2, Cam_H/2); camera_set_view_pos(view_camera[0],o_Player.x - (Cam_W/2),o_Player.y - (Cam_H / 2)); alarm[0] = 1; //alarm 0 x = o_Player.x; y = o_Player.y; if move{ if alarm[0] < 0{ alarm[0] = 1*room_speed; } } if FullScreen{ display_set_gui_maximize(); window_set_fullscreen(true); } else { display_set_gui_size(view_wport[0], view_hport[0]); window_set_fullscreen(false); } //clean up camera_destroy(view_camera[0]); Mysz jest na górze czerwonego kwadratu... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 7 Listopada Udostępnij Opublikowano 7 Listopada (edytowane) A teraz mam pierdołę. Mam taki kod var _inst = instance_create([reszta kodu]); with(_inst) { Direction = _Direction Damage = _Damage Head_Shot = true } Oczywiście wszystko leci w instancje tylko ta jedna się nie zmienia i jest to Head_Shot, badałem sprawę za pomocą show_debug_msg. Ale jedyne co wychodzi ze nie chce tylko tej zmiennej przenieść, wszystkie inne zmienia normalnie. Dziwne 😅 EDIT: znalazłem odpowiedź grzebiąc w necie, ten typ tak ma 🤷🏻♂️ dlatego na końcu instancji wprowadzono możliwość tworzenia struktur, by tworzyć zmienne przed stworzeniem obiektu. 👌 Edytowane 8 Listopada przez H2S04 Znalezienie rozwiązania Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Listopada Administratorzy Udostępnij Opublikowano 13 Listopada W dniu 8.11.2024 o 00:30, H2S04 napisał(a): dlatego na końcu instancji wprowadzono Ja tu doprecyzuję, że w najnowszych wersjach GM wygląda to tak: - utworzenie instancji - ustawienie zmiennych z Variable Definitions (w object properties) - ustawienie zmiennych z Structa przekazanego w instance_create_... (tylko instancja z kodu) - ustawienie zmiennych z create - ustawienie zmiennych z instance creation code (tylko instancja z rooma) - reszta kodu Dodaktowo, mamy jeszcze operator ??=, dzięki któremu można w create obejść problem, że zmienna została ustawiona przez structa i go nadpiszemy, ale warunkiem jest, żeby w Variable Definitions dać zmiennej wartość "undefined". 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ę