Nasze strony: gmclan.org gameonly.pl ps-plus.pl gameswithgold.pl n-switch.pl hmt.pl
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):

¤ KopiujGMLif 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.

¤ KopiujGMLif distance_to_object(obj_bohater)<100 and alarm[0] = -1
{
alarm[0] = 10;
}

¤ KopiujGMLif 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.

¤ KopiujGMLif 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
3 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 2, userów: 1, ukrytych: 0
SimianVirus7
Użytkownicy na czacie discord
Shoutbox
gnysekgnysek (23:51, 15.01.23):
Na fullscreenie nie, ale w okienku owszem. Najlepiej podpatrzyć jak robią to inni
MastodontMastodont (14:32, 14.01.23):
Jaką polecacie bezpieczną rozdzielczość gry na ten game jam Opery? 1920x1080 to chyba za dużo na przeglądarkę?
gnysekgnysek (15:03, 10.01.23):
Nie no, nginx, php, bazy danych
SutikkuSutikku (13:59, 10.01.23):
przenosiny ubuntu pewnie zamknęły się w przeniesieniu /home?
gnysekgnysek (11:26, 9.01.23):
Dziś pierwszy dzień pracuję z nowego lapka, ale jeszcze Windowsa mam do przeniesienia (coś koło 400GB danych)
gnysekgnysek (1:37, 7.01.23):
Tekst chyba nie, ale obrazki jak najbardziej. Tam jest taka gigantyczna struktura, którą w debuggerze najlepiej podejrzeć (albo do jsona wywalić na dysk), żeby znaleźć jak to zmienić.
AdriannAdriann (13:27, 6.01.23):
Da się zmieniać tekst i obrazki w sekwencjach za pomocą kodu?
gnysekgnysek (15:29, 4.01.23):
a ja przenoszę windowsa i ubuntu...
SutikkuSutikku (9:43, 3.01.23):
przenosiny na nowy sprzęt zawsze wiąże się dla mnie z bólem głowy, żeby odtworzyć milion customowych rzeczy które zrobiłem na wcześniejszym sprzęcie
gnysekgnysek (16:36, 2.01.23):
Na 2-3 dni muszę wstrzymać prace nad GMCLANem, bo przenoszę się na nowego laptopa
gnysekgnysek (17:48, 31.12.22):
@Adriann: myślałem tylko o ludziach z PL, @Sutikku pomyślę po weekendzie sylwestrowym
SutikkuSutikku (12:51, 30.12.22):
ja bym z chęcią pooglądał devlogi z przepisywania gmclanu, im just saying
AdriannAdriann (12:23, 30.12.22):
szczególnie jak będą nagrody
AdriannAdriann (12:22, 30.12.22):
A co myślisz żeby rozszerzyć temat i robić ją w formie game jamu na itch.io? Może dołączyliby nowi ludzie
gnysekgnysek (22:56, 29.12.22):
Tak, jest pomysł na np. 4x7 dni (1x na miesiąc) i nagrodę typu bon na steam za 100-200zł.
AdriannAdriann (21:37, 29.12.22):
Planujesz jakąś kontynuację ligi?
gnysekgnysek (15:09, 29.12.22):
W sumie zaczęte mam już 80%, nieruszone pozostały jedynie artykuły (czytanie, bo kategorie są) i liga.
gnysekgnysek (15:08, 29.12.22):
Dojechałem do przepisania 50% strony na nowy design i nowy kod. Niektóre moduły są teraz krótsze 0 80-90%, bo podobny kod przerobiłem na wspólne funkcje.
gnysekgnysek (14:05, 21.12.22):
To może kiedyś na jakimś dalszym etapie, na razie przepisuję obecne strony Wciąż są szanse na demo nowego designu jeszcze w tym roku.
SutikkuSutikku (12:40, 21.12.22):
to teraz jeszcze reakcje do shoutboxa, bo chciałem dać serduszko, a nie można
gnysekgnysek (13:29, 19.12.22):
No i aktualny GML (2023.1) jest dostępny. W końcu function i static jest kolorowane. Dodałem tez kopiowanie kodu
gnysekgnysek (9:10, 19.12.22):
GameMaker w folderze z runtime ma plik fnames i tam są definicje funkcji,stałych,wbudowanych zmiennych - trzeba to przeparsować i odpowiednio poprzydzielać. Ale brakuje if/else/break/try/while itp. i to trzeba ręcznie dodać. gist.github.com/.../a69ec324df61131b2546d1580f29a760
SutikkuSutikku (1:57, 17.12.22):
a z ciekawości, jak wygląda proces poprawienia kolorowania? Zaciągasz jakąś gotową paczkę, sam to jakoś definiujesz, w jakim formacie to jest zapisane?
gnysekgnysek (13:00, 16.12.22):
Teraz to chcę GMLa zaktualizować, bo nasze kolorowanie się na GM6-8 opiera
UzjelUzjel (12:17, 16.12.22):
Jeszcze zdjęcie profilowe na Twitterze zmień
gnysekgnysek (12:03, 16.12.22):
No i przerzuciłem mojego bota na GMCLANowy serwer, pod nowym adresem gms-updates.gmclan.org
gnysekgnysek (12:00, 16.12.22):
Dodałem LTS do listy aktualnych wersji GMa na głównej.
gnysekgnysek (23:22, 15.12.22):
Jeszcze nocki będziesz zarywał! Będę potrzebował testów i krytyki, to na pewno Ale to dopiero jak dojadę do czegoś bardziej podobnego do projektu z kanału dla patronów na Disco
UzjelUzjel (22:53, 15.12.22):
Gnysek jak coś potrzebujesz to przecież pisz :p
gnysekgnysek (16:55, 15.12.22):
Ja w sumie też. Myślę, że jeszcze tej zimy będzie, bo do świąt to już nie obiecam (ale przed sylwestrem może jakieś demo? )
AdriannAdriann (13:09, 15.12.22):
nie mogę się doczekać tego dark mode
gnysekgnysek (19:51, 14.12.22):
Tam jest błąd cache zapewne Nowy design sprawdzisz klikając na górze w "redakcja", ale to mocno wstępna wersja, bo Uzjel miał jeszcze kilka propozycji które będę wdrażał już robiąc całość.
SutikkuSutikku (15:14, 14.12.22):
Jak przejść na nowy design i podglądnąć?
ChellChell (11:27, 14.12.22):
aa, tam sa chyba po prostu zahardkodowane shouty
ChellChell (11:26, 14.12.22):
na nowym dizajnie nie laduje sie ostatni shout
gnysekgnysek (1:20, 9.12.22):
W sumie php8 to pikuś, testujemy też nowy design responsywny i z dark mode
SutikkuSutikku (10:03, 8.12.22):
odważny krok, puszczaj testy jednostkowe /s
gnysekgnysek (11:23, 7.12.22):
Zaktualizowałem PHP do 8.0, zgłaszajcie, gdyby coś nie działało
gnysekgnysek (10:57, 7.12.22):
2023.1
IgnatusIgnatus (8:58, 7.12.22):
Ciekawe o jaką wersję mogło chodzić
IgnatusIgnatus (8:58, 7.12.22):
No przynajmniej jakoś próbuje z tego wybrnąć XD zapodaj.net/images/2543c3a6eea62.png
IgnatusIgnatus (8:50, 7.12.22):
XD lol
gnysekgnysek (23:06, 6.12.22):
Nie ma takiej funkcji w GML, właśnie o to chodzi.
IgnatusIgnatus (20:36, 6.12.22):
Nie wiem o co chodzi więc wpisałem po prostu XD zapodaj.net/images/8bfcb19e4a9c5.png
gnysekgnysek (10:33, 6.12.22):
Zapytaj o shuffle na tablicy i zobaczysz, że różnie działa
IgnatusIgnatus (20:46, 5.12.22):
Jestem w szoku jak sprawnie to działa i że umie w GML XD
gnysekgnysek (16:09, 5.12.22):
już wiem, ChatGPT
gnysekgnysek (14:59, 5.12.22):
Co to za AI ?
SutikkuSutikku (7:52, 5.12.22):
bardzo dobra technika, ładne ślaczki wychodzą z pocisków, można się poczuć jak malarz
Ankieta
» Kiedy wyjdzie GameMaker (Studio) 3.0?
Q1 2022
Q2 2022
Q3 2022
Q4 2022
2023 albo i później

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

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