NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[GM] Mierzenie odległości i 2d sound
Autor Wiadomość
copperdragon 
Bohater
Popieram Ice Cold Revolucion


Pojedynki: tak
Pomógł: 5 razy
Posty: 625

55382 Prestiż
Wysłany: 15-09-2006, 19:08   [GM] Mierzenie odległości i 2d sound

Poniższy kurs pokaże, jak mierzyć odległość między dwoma obiektami oraz zrobić 2d sound.
1. Stwórz dwa obiekty, między którymi należy mierzyć odległość.
2. Stwórz obiekt "controller". Będzie on mierzył odległość między tymi obiektami*.
3. W zdarzeniu Create wpisz taki kod**:

Kod:
realdistance = 0
xdistance = 0
ydistance = 0
sumdistance = 0
maxdistance = 0

4. W zdarzeniu Step wpisz z kolei taki kod:

Kod:
xdistance = abs(object1.x - object2.x)
ydistance = abs(object1.y - object2.y)
realdistance = floor(sqrt(sqr(xdistance) + sqr(ydistance)))
sumdistance = xdistance + ydistance
maxdistance = max(xdistance,ydistance)

A teraz objaśniam, o so tu chozi:
a) xdistance i ydistance to różnice między x i y
b) realdistance to faktyczna odległość obliczona twierdzeniem Pitagorasa
c) sumdistance to suma odległości x i y***
d) maxdistance to większa wartość z xdistance i ydistance***
5. Kolejne zdarzenie; tym razem do Draw. Najpierw ustawiamy czcionkę i jej kolor, a potem wstawiamy ten kod:

Kod:
draw_text(x,y,'Odległość:' + string(realdistance))
draw_text(x,y+16,'Różnica x:' + string(xdistance))
draw_text(x,y+32,'Różnica y:' + string(ydistance))
draw_text(x,y+48,'Suma różnic:' + string(sumdistance))
draw_text(x,y+64,'Największa:' + string(maxdistance))

Jeśli któraś wartość jest tu zbędna, wystarczy, że usunie się odpowiadającą jej linijkę.

A teraz jak zrobić 2d sound z zastosowaniem prawdziwej odległości, czyli mierzonej przy pomocy twierdzenia Pitagorasa. Tutaj wyjaśnię, że chodzi o nagłaśnianie dźwięku wraz ze zbliżaniem się do obiektu. Nie jest to wielka filozofia, wystarczy w zdarzeniu Step dodać taki kod:

Kod:
sound_volume(sound0,1 - [1 podzielone przez maksymalną odległość] * realdistance)

Mam nadzieję, że ten kurs czegoś was nauczył, o ile nie należycie do osób, które tylko kopiują kod nawet nie zastanawiając się, co on znaczy. Kod można, a nawet należy przerabiać wedle własnych potrzeb, bowiem nazwy obiektów object1 i object2 raczej nie są najlepsze.



*oczywiście zdarzenia z obiektu controller możesz wstawić również do jednego z obiektów, w którym jest mierzona odległość
** możesz też ustawić w Global Games Settings "treat uninitialized variables as value 0", ale tylko wtedy, kiedy wszystkie wartości, które mogą być niezdefiniowane, mają na początku wynosić 0
*** mierzenie sumy moze się przydać, gdy chcesz obliczyć np. ile czasu potrzeba na dotarcie do drugiego obiektu ruchem czterokierunkowym, gdy nie ma żadnych przeszkód, natomiast mierzenie największej wartości może znaleźć podobne zastosowanie lecz w ruchu ośmiokierunkowym
Ostatnio zmieniony przez copperdragon 06-10-2006, 17:09, w całości zmieniany 1 raz  
 
 
     
morty 
Młodszy chorąży


Pomógł: 7 razy
Posty: 236

6521 Prestiż
Wysłany: 06-10-2006, 01:54   

Zamiast pierwiastkowania z kwadratu można po prostu użyć funkcji abs() która zwraca wartość bezwględną :)
_________________
http://gmapsapi.com - Poznaj Google Maps API
 
 
     
copperdragon 
Bohater
Popieram Ice Cold Revolucion


Pojedynki: tak
Pomógł: 5 razy
Posty: 625

55382 Prestiż
Wysłany: 06-10-2006, 17:09   

morty napisał/a:
Zamiast pierwiastkowania z kwadratu można po prostu użyć funkcji abs() która zwraca wartość bezwględną :)

Aj, faktycznie, już poprawiłem. ;)
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group