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
Akademia GMCLANu
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) | czas czytania: 3 minuty, 14 sekund
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

av

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

av

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.

av

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
4 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 3, ukrytych: 0
Temporal, gnysek, Korodzik
Użytkownicy na czacie discord
gnysek (10:39, 21.01.19):
tylko pod inną wodzą
pablo1517 (6:37, 21.01.19):
Tu wciąż wszystko śmiga . Damn
gnysek (0:10, 21.01.19):
Uff, @Uzjel zdążył
gnysek (0:09, 21.01.19):
tak było, jak nie działał uploader, bo Ranma nie ustawił uprawnień na katalogu
exp (0:05, 21.01.19):
a może to było na turnieju? tak czy inaczej było lepiej
exp (0:04, 21.01.19):
i tak było lepiej według mnie
exp (0:04, 21.01.19):
jeżeli dobrze pamiętam, w poprzedniej edycji głosowało się postem, a nie w ankiecie
Korodzik (0:03, 21.01.19):
czy jest jakieś zabezpieczenie przed tym?
Korodzik (0:03, 21.01.19):
na lidze da się głosować na siebie?
Uzjel (0:00, 21.01.19):
Za mao, daj 20 :p
gnysek (0:00, 21.01.19):
10 MB jest limit.
Uzjel (23:55, 20.01.19):
Na uploader też nie idzie...
Uzjel (23:52, 20.01.19):
Moja gra też jest za ciężka ;(
gnysek (23:46, 20.01.19):
Tak, dorobię, bo tym razem była też gra w HTML, więc faktycznie może się to zdarzać częściej. Ale to już nie dziś
Konrad-GM (23:36, 20.01.19):
Ok, dzięki @gnysek , poszło btw. fajna byłaby też opcja do wklejenia linku obok uploadera
gnysek (23:24, 20.01.19):
@Chell: poprawiłem, dzięki W ten weekend wrzuciłem już chyba z 15 hotfixów na stronę
gnysek (23:21, 20.01.19):
10 MB ustawiłem limit właśnie, był 2MB. Jak gra jest większa, daj zipa z linkiem w pliku .txt
Konrad-GM (22:56, 20.01.19):
Po spakowaniu gry to mi wychodzi ~18mb i nie mogę przesłać
Konrad-GM (22:52, 20.01.19):
Pany, jaki jest limit rozmiaru plików w uploaderze ligowym?
Chell (22:42, 20.01.19):
charset w nowościach z forum się sypnął
Chell (21:52, 20.01.19):
uf, głosowania gotowe
gnysek (21:38, 20.01.19):
Poprawiłem uprawnienia w dziale Liga24, teraz każdy może odpowiadać.
gnysek (20:56, 20.01.19):
jeśli ktoś odda czwartą, to strzelam, że będzie "nadzwyczajny" albo coś takiego
I am Lord (18:31, 20.01.19):
podobają mi sie nazywy gier
I am Lord (18:30, 20.01.19):
I i to jest bajer który trzeba jakoś jeszcze bardziej uwidocznić
Uzjel (13:15, 20.01.19):
Ekstra!
gnysek (13:09, 20.01.19):
Dodałem jeszcze listę uczestników na główną, może to was zachęci
I am Lord (8:57, 20.01.19):
No inny
Adriann (22:33, 19.01.19):
To chyba jakiś inny;p Tak czy inaczej ja też coś majstruję;>
I am Lord (21:58, 19.01.19):
ponoć Adrian szykuje metal gear solid w wersji CTC, ciekawe czy zdąrzy
exp (20:33, 19.01.19):
już wiem na co głosuje
Chell (20:09, 19.01.19):
miśki, jutro wieczorem startuje wielkie głosowanie!
gnysek (19:31, 19.01.19):
Poświęcił na to z tydzień, ale to nic innego jak nakładka/bypass.
gnysek (19:30, 19.01.19):
A to nie takie trudne tak naprawdę, bo każdy "własny" skrypt po kompilacji pozostawia swoją nazwę (do script_get_name()), więc do każdej istniejącej funkcji w GMS, wygenerował skrypt typu own_instance_create() z tą samą liczbą argumentów, a potem przeparsował kod wynikowy JS i znalazł co jest co, imo obfuskacji.
gnysek (19:29, 19.01.19):
Jakim oswobodzonym? On po prostu znalazł który skrpyt jak się nazwał po kompilacji przy eksporcie do HTML5 i konwertuje funkcje w jednym okienku, żeby działały w drugim. Ja bym to nazwał nakładką na dowolną grę GM wyeksportowaną do HTML5.
nowy_user (11:14, 19.01.19):
Może udostępnienie GMS2 jako open source byłoby tu najlepszym rozwiązaniem? Swoją drogą, autor GMLive stworzył też coś takiego: yal.cc/r/gml , gdzie możemy sobie kodzić w GML'u bez GMa ! Czy to znaczy, że GML powoli staje się jezykiem oswobodzonym z kajdan GM'a i być może niedługo będziemy mogli programować w GMLu w innych narzędziach?
nowy_user (11:13, 19.01.19):
Zgadza się, choć z drugiej strony, tak jak pisałeś kiedyś, przed erą PlayTech GM też nie był rentowny i przecieżbez wsparcia inwestora, GM utknąłby w miejscu. Bez odpowiednich funduszy musieliby w końcu zrobić redukcje etatów, bo niebyłoby ich stać na utrzymanie całego zespołu, a z koleji z mniejszym zespołem, postępy byłby znacznie wolniejsze.
gnysek (10:04, 19.01.19):
Ale nie oszukujmy się, nawet jak YYG nie zarabia na siebie, to playtech zarabia na nich na giełdzie, bo ludzie inwestują w akcje tylko dla tego, że mają YYG w portfelu. Więc ogólnie jednak zarabia na siebie, ale nie GMem.
gnysek (10:03, 19.01.19):
Tym się właśnie różni INDIE developer od korporacji. Korporacje strasznie narzucają, nawet jak klienci i programiści mówią "nie idźcie tą drogą".
gnysek (10:03, 19.01.19):
To jest możliwe tak: Playtech uważa, że to nie jest priorytet A zatrudnianiem zajmuje się YYG stąd czasem fajne osoby wejdą ale nie mogą dodać fajnych rzeczy, bo Playtech ma inne cele
nowy_user (9:32, 19.01.19):
Panowie, od 2 tygodni używam GMLive i musze przyznać, że ten asset to prawdziwy gamechanger. Jak to możliwe, że funkcja livecoding nie jest wbudowana domyślnie w GMS2 ? Tym bardziej to dziwi, że autor GMLive podobno pracuje dla YoYo...
gnysek (1:15, 19.01.19):
Masz, paczka: web.archive.org...rials/first.zip
gnysek (1:12, 19.01.19):
to było w tutkach na gamemaker.nl tylko
I am Lord (0:19, 19.01.19):
co jest grane, to ja już nie wiem w którym GMie to było, może GM8
I am Lord (0:18, 19.01.19):
ej bez jaj ściągnąłem GM6, GM7, GM8.1 i w żadnym nie ma catch the clowna w przykładach
I am Lord (0:17, 19.01.19):
mogę pobrać
gnysek (0:13, 19.01.19):
ja z googli wziąłem, powycinałem - możesz pobrać moją grę chyba już ?
I am Lord (23:50, 18.01.19):
a nie, to była z Gm8 bo widzę że defaultowe zasoby z gm6 mam jeszcze na dysku
I am Lord (23:48, 18.01.19):
Kurde gnysek gdzie można ściągnąć paczkę grafik z gm 6? bo z niej chyba te klauny pochodzą
Korodzik (22:05, 18.01.19):
Świetnie!
Ankieta
» Dżem czy konfitura?
Dżem
Konfitura

GMCLAN to serwis o programie Game Maker i nie tylko.
[ Polityka prywatności ]
Copyright © 2002-2019. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017-2019 {=|=} fable_inside();

[ Czas generowania strony: 0.02052 sekund ] [ Liczba zapytań MySQL: 13 ]