Skocz do zawartości

Temat zbiorczy na drobnostki


Chell
 Udostępnij

Rekomendowane odpowiedzi

  • Administratorzy

@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

  • 2 tygodnie później...

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

  • Administratorzy

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

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

Cytat


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

  • Administratorzy

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

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ć :D albo za dużo wymyślam :D

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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 :P

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...