Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy dla początkujących
Treść artykułu
Alarmy - jak działają, jak unikać błędów
autor: gnysek (17.06.09)
Alarm to jeden z ważniejszych eventów (zdarzeń) w GM. Czym są alarmy? To tak naprawdę po prostu zmienne pomocnicze, które oznaczają dla nas upływający czas, dzięki czemu możemy wykonać jakiś kod co pewien przedział czasu.
Przykładowo, wystrzał ze strzelby - naboje nie mogą wyskakiwać bez przerwy, bo przecież chwilę trwa "przeładowanie". Zatem najlepiej aby wylatywały co np. sekundę, lub półtorej. Właśnie do tego przyda się alarm.

Jak działa alarm?

Alarm jak już wspomniałem to po prostu taka pomocnicza zmienna. Domyślnie, alarmów jest 12 (zmienne alarm[0] - alarm[11]). Wartość ustawiona w alarmie oznacza liczbę kroków (eventów step), za które nastąpi ich wywołanie ( w trakcie jednej sekundy event step jest wykonywany dokładnie tyle razy ile wynosi wartość room_speed danej planszy - domyślnie 30 eventów na sekundę, co równa się też 30 klatkom na sekundę obrazu). Gdy dochodzi do zera, wykonuje się kod eventu alarm, a on sam ustawiany jest na -1. Gdy równa się -1 nie jest już zmniejszany.

alarm[X] > 0 - w każdym kolejnym kroku alarm jest zmniejszany o 1 aż do zera
alarm[X] = 0 - następuje wywołanie zdarzenia / eventu AlarmX, alarm[X] ustawiamy na -1, przestajemy go zmniejszać
alarm[X] = -1 - nie dzieje się nic, alarm jest nieaktywny

Zatem, jeżeli chcemy aby jakieś zdarzenie następowało co sekundę, nalezy ustawić alarm[0] na room_speed, lub 30 (jeżeli tyle wynosi room_speed danej planszy).

Najczęściej popełniane błędy

Najczęściej popełniany błąd, to wywołanie alarmów w zdarzeniach (eventach) step, lub kolizji.
Przykładowo, jeżeli obj_bohater jest blisko obj_przeciwnik, to przeciwnik ma strzelać.
Pierwszy kod jaki przychodzi do głowy wygląda tak (kod dla obj_przeciwnik, event step - sprawdzany w każdym kroku):

gml:
if distance_to_object(obj_bohater)<100
{
alarm[0] = 10;
}


Oczywiście kod jest BŁĘDNY! Dlaczego? Zastanówmy się. Jak wcześniej powiedziałem, w każdym stepie alarm zmniejszany jest o 1 aż dojdzie do 0.
Wykonujemy pierwszy krok. Odejmujemy 1 i nasz alarm[0] = 9. Następnie sprawdzany jest kod podany w step. Bohater stoi nadal blisko przeciwnika, zatem warunek jest spełniony i alarm[0] ustawiamy na 10.
W kolejnym kroku alarm znów sam zmniejsza się o 1, ale my znów ustawiamy go na 10. W ten sposób zatrzymaliśmy alarm w miejscu! Zacznie odliczać się dopiero, gdy bohater odsunie się od przeciwnika - i dopiero wtedy przeciwnik zacznie strzelać. Tego przecież nie chcemy.
Jak wspomniałem, alarm jest nieaktywny gdy jest równy -1. Wykorzystajmy ten fakt do poprawienia naszego kodu. Można to zrobić w dowolny sposób, ja podam dwa.

gml:
if distance_to_object(obj_bohater)<100 and alarm[0] = -1
{
alarm[0] = 10;
}


gml:
if distance_to_object(obj_bohater)<100
{
if alarm[0] = -1 then alarm[0] = 10;
}


Oczywiście zakładam, że w zdarzeniu Alarm0 mamy kod tworzenia pocisku.

Mam nadzieję, że wyjaśniłem wystarczająco działanie alarmów.

Własny alarm

Na podstawie wiedzy którą masz, powinieneś być w stanie stworzyć nieskończenie wiele alarmów na własne potrzeby. Przykładowy kod własnego alarmu (w Create obiektu definiujemy zmienną moj_alarm = -1;), umieszczony w zdarzeniu Step.

gml:
if moj_alarm>0
{
moj_alarm -= 1;
}
else if moj_alarm = 0
{
moj_alarm = -1;
// kod do wykonania naszego alarmu, np. instance_create(x,y,obj_bullet);
}


Ustawienie zmiennej moj_alarm na większą od zera spowoduje wykonanie się kodu za podaną ilość kroków.

Tak właśnie działają alarmy - ale w przypadku wbudowanych zmiennych alarm[0] - alarm[11] powyższy kod Game Maker wykonuje za nas.
głosów: 7 | ocena: 8.14 oceń zasób | dodał: gnysek
Komentarze
stron: 1

1


av

baca (14:21, 17.06.2009)

Początkującym może się przydać, a reszcie raczej nie

av

gnysek (14:22, 17.06.2009)

Artykuły -> Game Maker -> Kursy dla początkujących - czy to Ci coś mówi ?

av

baca (14:47, 17.06.2009)

Sory nie spojżałem na to

av

PoxiPol (21:18, 17.06.2009)

Przyznam, ja w cholere pisalem alarmy wlasne na zmiennych. A teraz dopiero rozumiem po co sa. :/ Platyna ma racje, glupieje.

av

Egzekutor (21:27, 17.06.2009)

Poxi wstydź się No fajny art. 9/10

av

Platyna (22:17, 17.06.2009)

Takie małe sprostowanie: Nigdy nie powiedziałem, że on głupieje. Sam to sobie dopowiedział. Poza tym to było dawno i nieprawda

I takie skromne pytanko, bo mnie ciekawi w sumie. W którym momencie konkretnie jest wykonywane zmniejszenie wartości alarmu o 1? Przed wszystkimi zdarzeniami? A może po nich?
W sumie wiele to nie zmienia, ale czasem może.

av

Paqoo (23:31, 17.06.2009)

Bardzo ciekawe - nie wiedziałem, że można robić własny alarm ;d

av

David Dark (0:02, 18.06.2009)

Tez nie wiedzialem Bede musial na to spojrzec

borubarartur (9:07, 18.06.2009)

ja też zwykle nie łapałem alarmów choć widziałem że powtarzają się w wielu przykładach.zastępowałem je, jak tu już zostało powiedziane-własnymi alarmami, bo tak naprawdę to alarmy są dla użytkowników GM'a mniej zaawansowanych w GML'u.
to jest tak samo jak z klockami, na początku używasz ich jednak gdy znasz ich odpowiednika w GML'u-zastępujesz go nim, choć przyznam że używanie alarmów napewno jest bardziej wygodne niż pisanie własnego alarmu w skrypcie.co do pytania Platyny o to kiedy wykonywane jest zmniejszenie alarmu- mi osobiście sie wydaje że po wszystkich akcjach choć i przed wszystkimi akcjami wiele nie zmienia.a artykuł naprawdę dobry bo dopiero po nim zrozumiałem jak to ustrojstwo działa

av

Ghost (13:59, 18.06.2009)

Własny alarm... Ja wiedziałem, nawet sam na to wpadłem ;p

av

Platyna (16:59, 18.06.2009)

A no co tu było wpadać? Toż alarmy są tak oczywiste że nie mogę

av

gnysek (21:08, 18.06.2009)

Jak wiesz jak działają, to wiesz, jak zrobić je samemu xD

av

PoxiPol (22:18, 18.06.2009)

lol, ja wiedzialem jak je zrobic samemu, ale nie wiedzialem jak dzialaja. Woop woop.

av

geralt100 (21:23, 21.06.2009)

ja nie łapałem alarmów szczeże mówiąc

av

Roki (9:45, 22.06.2009)

A ja załapałem alarmy od razu, ale nie myślałem o własnych.

av

boom (14:56, 22.06.2009)

mi po prostu niektóre alarmy prościej było definiować zmiennymi niż dawać w evencie alarm0 np alarm[0] = 30.

av

Dżamper (0:29, 23.06.2009)

@Platyna: Zgodnie z kolejnością eventów w obiektcie. Chyba w helpie nawet o tym pisze

Kubx (12:04, 26.06.2009)

Warto wspomnieć o tym, że w alarmach musi być jakaś akcja (chociażby komentarz), aby on się wykonał!

av

gnysek (13:36, 26.06.2009)

jak będzie komentarz, to się nie wykona, chyba logiczne.

btw. można użyć stepa zamiast eventu Alarm i też zadziała.

Kubx (22:20, 27.06.2009)

gnysek -> jak korzystałem z GMa (wersja 6.1) to aby alarm był ODLICZANY musiał posiadać jakąś akcje w swoim evencie, a to co wykona po odliczeniu to swoją drogą.

stron: 1

1



Dodaj komentarz:
Treść:
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
39 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 39, userów: 0, ukrytych: 0


0 użytkownik(ów) na gmczacie i 0 bot(ów)
Shoutbox
Chell (22:56, 27.06.17):
sory za brzydkie slowa
Chell (22:55, 27.06.17):
kurwa jak tak patrzę na te garbary i pomyślę że jutro przed siódma tam będę jechał pisać to nie mogę
I am Lord (22:16, 27.06.17):
zablokowane to jest tylko dla nowych kont
I am Lord (22:16, 27.06.17):
po zalogowaniu doda ci twoją starą licencję free
I am Lord (22:16, 27.06.17):
Exp ściagniesz stąd www.yoyogames.c...tes-studio.html
Nikas (19:43, 27.06.17):
Na poczatku czytam, jakieś ideały, nie dla kasy, myślę wtf a tu nagle plot twist. xDDDD
I am vader (19:20, 27.06.17):
Nie przyznawaj sie bo nie wolno tego tu robic.
exp (17:18, 27.06.17):
to teraz muszę ściągać pirata programu, który kiedyś kupiłem
Wojo (10:33, 27.06.17):
Gnysek coś ty najlepszego narobil...
Chell (10:26, 27.06.17):
a zaczęło się sypać gdy pasjonat Overmars sprzedał gma diabłom korporatom
Chell (10:25, 27.06.17):
uśmiechnąłem się z ostatniego zdania
nowy_user (8:23, 27.06.17):
No właśnie... kiedyś mieli inne podejście, jak kupiłeś np GMa 5 (nota bene za ok 20 $ ), to dostawałeś w gratisie darmową aktualizacje do Gma 6 a potem do 7-ki. Widać było, że chłopaki nie robili tego dla kasy tylko dla idei. Wszystko zaczęło się sypać, gdy Gnysek odszedł z Yoyo, po prostu zabrakło kogoś, kto wyznaczałby standardy moralne.
Wojo (7:59, 27.06.17):
Ale pirat zadziała... I to pokazuje jak twórcy szanują pełnoprawnych użytkowników
Uzjel (1:11, 27.06.17):
Oficjalna wersja GM 8 nie powinna zadziałać (serwer licencji)
exp (0:37, 27.06.17):
a jeżeli nie, to stoi coś na przeszkodzie, żeby używać gm8? widze, że gierki działają na windows 10
exp (0:37, 27.06.17):
hmm. chyba kiedyś założyłem darmowe konto na studio, więc mogę ściągnąć gm z dobreprogramy i bzikać?
I am vader (0:13, 27.06.17):
Na 2.0 możesz co najwyżej uczyć kogoś programowania, ale gry nie zrobi bo nie ma robienia plików exe na darmolcu
I am vader (0:12, 27.06.17):
NIe ma w zasadzie juz darmowego GM'a. GMS 1.4 nie pozwala na zakladanie juz darmowych kont a 2.0 w ogole ma wszystko poblokowane w wersji free.
Uzjel (0:07, 27.06.17):
Chcesz za darmo co?
exp (23:27, 26.06.17):
jeżeli chcę za darmo
exp (23:20, 26.06.17):
ej której wersji GM się teraz używa?
Uzjel (22:03, 26.06.17):
xD
I am vader (20:51, 26.06.17):
Haha, o tym samym pomyslalem jak to zobaczylem
exp (17:04, 26.06.17):
mamo no ja nie oglądałem nic dla dorosłych, to samo tak wyskoczyło no
I am Lord (16:34, 26.06.17):
No mi się wyświetlały jakieś dildosy a to nie jest moje zainteresowanie Ktoś coś dziwnego przeglądał na moim kompie
Threef (16:30, 26.06.17):
Banery reklamowe są personalizowane. Wy widziesz to co wg reklamodawców Cię nteresuje (na podstawie twojej historii)
nowy_user (10:36, 26.06.17):
Hej, czy był ktoś z was na kursie programowania CodersLab(Ci od baneru)? Zastanawiam się nad tym, ale jestem ciekaw czy warto.
Chell (1:16, 26.06.17):
conieco
ANtY (1:03, 26.06.17):
elo co tam
I am Lord (19:53, 25.06.17):
Za dużo tam różnych optymalizacyjnych działań na bitach i flagach bitowych
I am Lord (19:50, 25.06.17):
Ogółem prawie nic nie rozumiem z tego kodu źródłowego, analiza gry AAA to nie mój poziom :p
I am Lord (19:49, 25.06.17):
Udało mi się skompilować i odpalić kod źródłowy ArxLibertatis (portu gry ArxFatalis) ile z tym roboty było ja pierdziele, nigdy więcej
I am vader (4:04, 25.06.17):
Nie ma to jak usuwanie botów o 4'tej
I am vader (20:22, 24.06.17):
Threef za biały jest na allahuackbar
Ignatus (19:59, 24.06.17):
Threef zapuść wąsa do tej brody bo jest teraz za bardzo allahuakbar
I am Lord (18:01, 24.06.17):
ok mam chwilkę> to wbiję
Threef (17:26, 24.06.17):
Właśnie zaczynam streamować. www.twitch.tv/threef_games
I am Lord (17:02, 24.06.17):
Zbanowałem bota zanim zrobił temat to jest skill a nie jakieś programowanie
I am Lord (15:07, 24.06.17):
Chyba sobie do niego powrócę ale pamiętam że ciężko mi było się w tym połapać wszystkim, niby tego Newton Ponga zrobiłem ale połowę gry odwalił za mnie silnik fizyczny więc za wiele się nie nauczyłem
ANtY (13:21, 24.06.17):
na szczescie, bo to co w unity było to nawet nie był prawdziwy JS
Danieo (11:44, 24.06.17):
C# jest wiodącym językiem w Unity. Tak jak Boo już wymarło to powoli wymiera JS
Adriann (22:49, 23.06.17):
Łoo, pszekonał :3
Nikas (22:03, 23.06.17):
chuj kurwa gem makr zarabiaj dorary
PatrykPlayingPOLSKA (21:33, 23.06.17):
Są wakacje więc postanawiam nie zmarnować tego czasu.
I am vader (20:55, 23.06.17):
C#
I am Lord (19:40, 23.06.17):
C#
PatrykPlayingPOLSKA (19:09, 23.06.17):
Właśnie,może ktoś powiedzieć w czym zacząć pisać w Unity czy w C# czy javascript.W czym lepiej ?
ANtY (17:42, 23.06.17):
w GMie możesz programować bardzo mieszaną składnią, także zależy jak to robisz, w Unity korzystasz z C# (wcześniej dużo ludzi jeszcze z JS korzystało ale unity juz go nie supportuje na rowni z c#)
I am vader (16:54, 23.06.17):
Anty
Ankieta
» Jakiej wersji GameMakera głównie Używasz?
GameMaker: Studio 2
GameMaker: Studio
GameMaker 8.1 i starsze
Żadnej

GMCLAN to serwis o programie Game Maker i nie tylko.
Copyright © 2002-2017. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!

[ Czas generowania strony: 0.02564 sekund ] [ Liczba zapytań MySQL: 15 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev