FORUM PTT -

POMOC inne - World.PlaySound

zgred - 21-05-2011, 15:28
: Temat postu: World.PlaySound
Do tej pory sobie radziłem z skryptem ale to mnie chyba pokonało.

Mam problem z funkcją playsound. Chce ją dodać do funkcji, która jest wywoływana z karty lokomotywy (tam gdzie ustawianie drzwi, swiateł itp) .

Mam zrobione coś takiego:

Cytat:

void Oenn(bool sta)
{
World.PlaySound(meAsset, "e_petla.wav", 5000.0f, 2.0f, 800.0f, me, "");
}


I problem jest taki że jest nie zadeklarowana fukcja Playsound . Biblioteke world.gs podpiąłem pod skrypt. Same dźwieki hamulców działają na podobnej funkcji ale ta już nie ma ochoty współpracować.

Pomoże ktoś? wiem że skrypty na polskiej scenie to czarna magia dla niemal wszystkich :P
RBach - 21-05-2011, 17:28
: Temat postu: Re: World.PlaySound
zgred napisał/a:
Do tej pory sobie radziłem z skryptem ale to mnie chyba pokonało.


Pomoże ktoś? wiem że skrypty na polskiej scenie to czarna magia dla niemal wszystkich :P


Pytanie podstawowe - plik wav ma właściwy format? Wiem, że to dziwne pytanie do autora modeli, ale czasami zdarza się przeoczyć takie pierdoły :-)

Poza tym - sprawdź, czy podpiąłeś pod właściwy obiekt - ten parametr "me". No i parametry liczbowe - to "f" na końcu na 100% ma być?
zgred - 21-05-2011, 18:02
:
Tak to było ok...

brakowało przed World.Play.....
wpisu:
Asset meAsset = GetAsset();

Nie wiem co to i po co ale już dzięki temu funkcja PlaySound jest zadeklarowana.

Pozostał teraz problem z tym ze dzwiek nie odtwarza sie w petli po zaznaczeniu "ptaszka"...
RBach - 21-05-2011, 18:12
:
zgred napisał/a:
Tak to było ok...

brakowało przed World.Play.....
wpisu:
Asset meAsset = GetAsset();

Nie wiem co to i po co ale już dzięki temu funkcja PlaySound jest zadeklarowana.


Przypisuje zmiennej meAsset obiekt, którego dotyczy skrypt (czyli obiekt, który odpala dany skrypt). W tym przypadku ten obiekt, który ten skrypt w sobie zawiera (samego siebie).


zgred napisał/a:

Pozostał teraz problem z tym ze dzwiek nie odtwarza sie w petli po zaznaczeniu "ptaszka"...


Wprowadź zmienną boolean (true/false), zależną od ptaszka. I tą zmienną podstaw jako ostatni parametr wywołania playsound, który właśnie pętlowaniem dźwięku steruje.

Z TrainzDev Wiki:

Kod:
(Asset asset, string wave, float vol, float near, float far, GameObject target, string pt, bool loop)



czyli


Kod:
World.PlaySound(meAsset, "e_petla.wav", 5000.0f, 2.0f, 800.0f, me, "",zmiennazaleznaodptaszka);

zgred - 21-05-2011, 18:27
:
dodałem, a raczej wpisałem zmienną bool 'en' na końcu.

Teraz dźwięk jest w petli po zaznaczeniu ptaszka ale po jego odznaczeniu dźwięk dalej działa w pętli...
RBach - 21-05-2011, 22:46
:
zgred napisał/a:
dodałem, a raczej wpisałem zmienną bool 'en' na końcu.

Teraz dźwięk jest w petli po zaznaczeniu ptaszka ale po jego odznaczeniu dźwięk dalej działa w pętli...


To przepatrz kod, czy przypadkiem nie zginęło gdzieś przypisanie zmiennapętlowa=false. Teraz prawdopodobnie jest tak, że jak zaptaszczysz, to zmienna dostaje TRUE, ale jak odptaszczysz - to nie dostaje FALSE. Druga możliwość to taka, że funkcja playsound się "zapamiętuje" i nadanie zmiennej FALSE nie zatrzymuje pętli. W tym wypadku trzeba dojśc, jak zatrzymać odtwarzanie - możesz spróbować np wywołać jeszcze raz playsound ale ze zmiennapetlowa=false (można tez wywołać bezpośrednio z true albo false):

czyli:
Kod:

if zaptaszczone
   {
    playsound(wszystkie_inne_parametry,TRUE);
    }
else
   {
    playsound(wszystkie_inne_parametry,FALSE);
   }
;