Mierzenie odległości i dźwięk 2D w GM

Klikipedia - klikowa encyklopedia
Skocz do: nawigacji, wyszukiwarki
Autor.jpg
Autorem tego artykułu jest
copperdragon

Poniższy kurs pokaże, jak mierzyć odległość między dwoma obiektami oraz zrobić 2d sound.

Wykonanie

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

3. W zdarzeniu Create wpisz taki kod 2:

realdistance = 0 
xdistance = 0 
ydistance = 0 
sumdistance = 0 
maxdistance = 0

4. W zdarzeniu Step wpisz z kolei taki 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 co tu chodzi:

  • xdistance i ydistance to różnice między x i y
  • realdistance to faktyczna odległość obliczona twierdzeniem Pitagorasa
  • sumdistance to suma odległości x i y3
  • maxdistance to większa wartość z xdistance i ydistance3

5. Kolejne zdarzenie; tym razem do Draw. Najpierw ustawiamy czcionkę i jej kolor, a potem wstawiamy ten 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:

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

Zakończenie

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.

Przypisy

1 oczywiście zdarzenia z obiektu controller możesz wstawić również do jednego z obiektów, w którym jest mierzona odległość

2 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

3 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

Źródło

informacje na temat funkcji, użytych w artykule: draw_text(), sound_volume(), string()