Dźwięk silnika w TGF/MMF: Różnice pomiędzy wersjami

Klikipedia - klikowa encyklopedia
Skocz do: nawigacji, wyszukiwarki
(Przydałby się ktoś, kto by sprawdził czy wszystko jest OK. W oryginalnym arcie Alicja nieco się pogubiła.)
 
Linia 115: Linia 115:
 
}}
 
}}
 
Później możecie sami łatwo dodać blokowanie i odblokowywanie sterowania samochodem przy pomocy flagi 0 tegoż samochodu. Życzę udanych rajdów.
 
Później możecie sami łatwo dodać blokowanie i odblokowywanie sterowania samochodem przy pomocy flagi 0 tegoż samochodu. Życzę udanych rajdów.
 +
[[Kategoria:Kursy i tutoriale]]
 +
[[Kategoria:Kursy i tutoriale dla użytkowników MMF]]
 +
[[Kategoria:Kursy i tutoriale dla użytkowników TGF]]
 +
[[Kategoria:Artykuły dla średniozaawansowanych]]

Wersja z 19:58, 20 lis 2006

Slimaczek.jpg
Pierwotna wersja tego artykułu pochodzi z 4. numeru Ślimaczka (zobacz oryginalny artykuł).


Autor.jpg
Autorem tego artykułu jest
Alicja

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 zsymulowaniem 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.

Wprowadzenie

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.

Jak to zrobić?

Jako obiekt A oznaczymy DMC2, a jako obiekt B - samochód.

Kod do edytora zdarzeń
N Zdarzenia
1
+ EZ-special.png Start of level/Start of frame
ActiveA.gif InitBass()
ActiveA.gif OpenSample(file=".\Engine.wav", chan=0)
ActiveA.gif 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:

1
+ EZ-special.png Start of level/Start of frame
ActiveA.gif InitBass()
ActiveA.gif OpenSample(file=".\Engine.wav", chan=0)
ActiveA.gif PlaySample(looping=1, chan=0)
2
+ EZ-special.png Always
ActiveA.gif Set SampleFreq(Speed(ActiveB.gif)*300+1000)

Włączanie i wyłączanie silnika

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.

1
+ EZ-special.png Start of level/Start of frame
ActiveA.gif InitBass()
ActiveA.gif OpenSample(file=".\Engine.wav", chan=0)
ActiveA.gif PlaySample(looping=1, chan=0)
ActiveB.gif Set internal flag 0 off

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

2
+ EZ-special.png Always
ActiveA.gif Set SampleFreq(Speed(ActiveB.gif)*300+Value A(ActiveB.gif))

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.

3
+ ActiveB.gif Flag 0 is on
+ ActiveB.gif Altebrate Value A<1000
ActiveB.gif Add to altebrate Value A 5
4
+ ActiveB.gif Flag 0 is off
+ ActiveB.gif Altebrate Value A("Autko")>0
ActiveB.gif Substract from altebrate Value A 5
5
+ ActiveB.gif Altebrate Value A<0
ActiveB.gif Set Altebrate Value A 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:

6
+ EZ-special.png Upon presing [enter]
+ EZ-special.png Only one action when event loop
ActiveB.gif Toggle interal flag 0

Później możecie sami łatwo dodać blokowanie i odblokowywanie sterowania samochodem przy pomocy flagi 0 tegoż samochodu. Życzę udanych rajdów.