Skocz do zawartości

Dzwięk odgrywany tylko raz GM:S


Rekomendowane odpowiedzi

Witam.Banalna sprawa ale znów (jak to w moim przypadku przy banalnych sprawach) wstrzymuje mi pracę od dobrych kilku godzin

 

Platformówka.Postać wpada na kolce- w momencie wpadnięcia odgrywamy dźwięk nabicia na kolce- oczywiście ma być odegrany tylko jeden raz.

Przy zwykłym włączeniu dźwięku przy kolizji jest oczywiście karabin maszynowy zamiast dźwięku,tego też się spodziewałem

 

Wszędzie mamy:

Kolizja z obiektem kolce

 

GML
spiked=true

 

GML
Object_player step

sprite_index=spr_spiked // animacja smierci na kolcach

 

Jak na razie podjąłem takie próby:

1.

GML
if (spiked=true){if !audio_is_playing(snd_spiked) {audio_play_sound(snd_spiked,15,false)}}
// Zamiast karabinu mamy odtworzenie 3-4 razy dzwieku- nadal do bani

 

2.Tak samo jak poprzednio ale z dodatkową zmienną spike_sound

GML
if (spiked=true) && (spike_sound=true){if !audio_is_playing(snd_spiked) {audio_play_sound(snd_spiked,15,false) spike_sound=false}}

lub

GML
if (spiked=true) && (spike_sound=true){audio_play_sound(snd_spiked,15,false) spike_sound=false}
// Taki sam efekt jak poprzednio

 

3.Z tym wiązałem największe nadzieje-uzależnienie dźwięku od klatki animacji

GML
if (sprite_index=spr_spiked)&&(image_index=1) {audio_play_sound(snd_spiked,15,false)}
// Tutaj efekt najciekawszy bo odgrywa się tak jak powinno ale... raz na kilka prób.W zasadzie losowo, na 50 prób może z 20 się odegra dźwięk ,reszta cisza-przy identycznych próbach dźwięk raz jest raz nie.Próbowałem różnych wariantów tej opcji (image_index> lub image_index<) klatek animacji jest 18- niestety zmiana niewielka, ewentualnie większa szansa na odegranie-ale na pewno nie zawsze(albo znów kilka razy)

 

Jak Wy to robicie w Waszych grach?

Odnośnik do komentarza
Udostępnij na innych stronach

Można to robić w ten sposób. Masz kolizję z kolcami. Event ten powtarza się ciągle gdy jest kolizja.

GML
if (spiked=false){audio_play_sound(snd_spiked,15,false)}

spiked=true

Biorąc pod uwagę że zmienna spiked zmienia stan na true dopiero w czasie pierwszego wykonania kolizji i robi to dopiero po sprawdzeniu warunku który ma odgrywać dźwięk, to dźwięk odegra się tylko raz. Oczywiście gdy kolizja już nie zachodzi trzeba przywrócić spiked=false.

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety nadal mam karabin maszynowy.Mogę ustawić spiked=false ale to nie zmienia faktu że kolizja później nadal zachodzi(przez całą animację śmierci na kolcach)- więc i tak rozpocznie się wszystko na nowo.Próbowałem w stepie i próbowałem w colision event, nic to nie zmienia.

 

Przede wszystkim chciałbym wiedzieć dlaczego manewr z image_index nic nie dał.Wydawało mi się do tej pory że ta funkcja działa na zasadzie np.

 

GML
if (image_index=2){akcja}
jeżeli zostanie wyświetlony 2 subimage to wykonujemy akcję- czy to działa w inny sposób?

 

Dlaczego tutaj zawodzi(albo raczej działa raz na 3 identyczne próby)?

Odnośnik do komentarza
Udostępnij na innych stronach

image_index co step jest zwiększany o image_speed, a gdy image_index jest większy (i równy?) image_number wtedy jest odejmowane od niego image_number.

 

Teraz znajdź miejsce w którym masz wpisane image_speed=0.3 i zapytaj się czemu tak rzadko wynosi tyle ile myślisz. ;)

 

Mógłbyś spróbować zaokrąglaćif (floor(image_index)=2){akcja} ale wtedy wracasz to starego problemu "karabinu maszynowego".

 

Przeanalizuj to co dałem w poprzednim poście. Za bardzo mieszasz, a rozwiązanie naprawdę jest banalne.

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ę
  • Ostatnio przeglądający   0 użytkowników

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