wstecz  |  dalej  |  spis treści

 

      Gaz do dechy!

 

autor: Fallen Angel


 

   Ten krótki kurs dla TGF oraz MMF, ma nas nauczyć dodawania dźwięków do naszych wyścigówek. Wielu klikowców ma problem z zasymulowaniem odpowiedniego dźwięku silnika. Można by i odtwarzać odpowiednią próbkę dla danej prędkości, ale zajmowały by one trochę więcej, a efekt byłby średni. Potrzebne składniki do kursu to: DMC2 object, TGF lub MMF i krótki jednolity dźwięk silnika. Na przykład weźmy Engine.wav z gry Genne Rally (do ściągnięcia prawie wszędzie, jest to mała gra freeware). A teraz przejdźmy już do samego kursu.


   Posiadając odpowiednią wiedze z lekcji fizyki, jesteśmy przygotowani na to że będziemy musieli zmienić częstotliwość dźwięku. Na szczęście twórcy DMC2 nie omieszkali dać i takiego narzędzia. Tak więc mając już gotowy samochód z ruchem wyścigowym, pliki Engine.wav i bass.dll w folderze z plikiem gam, oraz wstawiony DMC2 object, otwieramy edytor zdarzeń. Na początek musimy otworzyć naszą próbkę, co chyba dla wszystkich jest dziecinnie proste . Dla warunku Start of level/Start of frame dodajemy zdarzenia:

 

Kod:

 

+ InitBass()
+ OpenSample(file=".\Engine.wav", chan=0)   
+ PlaySample(looping=1, chan=0)

 

 

   Jak pewnie zauważyliście, zapętlamy próbkę, co powinno być oczywiste. Teraz czas na regulację próbki względem prędkości pojazdu. Dodajemy warunek Always czyli "zawsze" i wybieramy zdarzenie z DMC2 "Set SampleFreq". Teraz zastanówmy się nad wartością. Oczywiście pobierzemy wartość prędkości, tyle, że częstotliwość byłaby w takim wypadku za mała. Mnożymy więc wartość prędkości razy 300 (ja doszłam do tego eksperymentalnie, wy też popróbujcie). Testujemy poziom.


   W sumie wszystko wypada pomyślnie, jednak coś tu jest nie tak. Przy prędkości zero nie słychać silnika (300*0 = 0). Zazwyczaj samochód na postoju automatycznie nie wyłącza silnika, robi to kierowca. Musimy więc ustalić początkową wartość częstotliwości, którą dodamy do naszego działania (i wtedy przy prędkości zero 300*0+x=x). Najlepiej dobrać sobie według uznania, mi wypadło 1000. Przypatrzmy się kodowi:

 

Kod:

 

:Start of frame
+ InitBass()
+ OpenSample(file=".\Engine.wav", chan=0)   
+ PlaySample(looping=1, chan=0)
:Always
+ Set SampleFreq(Speed("Autko")*300+1000)

 

 

   Mamy już to co potrzeba, ale czy nie fajnie by było gdyby ten samochód ładnie się uruchamiał i gasił za naszym pozwoleniem? Nic trudnego! Pożyczymy sobie jedną wartość samochodu (o ile nie użyliście jej na uszkodzenia, wtedy weźcie sobie inną, bądź wyprodukujcie licznik ) oraz flagę - flaga 0 niech będzie flagą stanu silnika. Cała zabawa polega na tym by nie wyłączać od razu dźwięku, a płynnie go zmienić. Wystarczy więc zamiast 1000 dodawać wartość A, i regulować nią w razie zmiany flagi stanu. Zaraz rozjaśnię wam ten bajzel. Ustalając za klawisz włącznika [enter] przystępujemy do modyfikacji kodu.

 

Kod:

 

:Start of level
+ InitBass()
+ OpenSample(file=".\Engine.wav", chan=0)   
+ PlaySample(looping=1, chan=0)
+ Set internal flag 0 ("Autko") off

 

   Tradycyjnie na starcie ładujemy bibliotekę i odtwarzamy próbkę. Dodatkowo ustalamy flagę 0 samochodu na wyłączoną (auto jest wyłączone).

 

Kod:

 

:Always
+ Set SampleFreq(Speed("Autko")*300+Value A("Autko"))

 

 

   Zawsze ustalamy częstotliwość dźwięku silnika jako prędkość autka raz 300 plus wartość A samochodzika. To powinno być jasne. Teraz poregulujmy wartość A.

 

Kod:

 

:Flag 0 is on
:Altebrate Value A("Autko")<1000
+ Add to altebrate Value A("Autko") 5
:Flag 1 is on
:Altebrate Value A("Autko")>0
+ Substract to altebrate Value A("Autko") 5
:Altebrate Value A("Autko")<0
+ Set Altebrate Value A("Autko") to 0

 

 

   Ostatnie zdarzenie zapobiega wystąpieniu błędu. Jako twórcy gier powinniśmy o tym pamiętać - by zapobiegać prostym błędom.
Teraz względy sterowania:

 

Kod:

 

:Upon presing [enter]
:Only one action when event loop
+ Toggle interal flag 0 ("Autko")

 

 

No i na koniec możecie łatwo blokować i odblokowywać sterowanie samochodem przy pomocy flagi 0 tegoż samochodu. Życzę udanych rajdów .

 

 

 

 wstecz  |  dalej  |  spis treści

by pepe9donkey