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):

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

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

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

GMLif 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
2 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 2, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
Shoutbox
AnacondaAnaconda (17:02, 21.07.22):
Działa, działa. Aż mi się młodość przypomniała. Kiedyś to były czasy, teraz to nie ma czasów
gnysekgnysek (17:45, 20.07.22):
Czyli wysyłka mejli działa
PieterPieter (14:28, 20.07.22):
cześć tylko sprawdzam, czy nadal konto mi działa po tylu latach
gnysekgnysek (13:45, 20.07.22):
Kto może, niech dołącza - meetup.com/gamemaker-polska
gnysekgnysek (15:09, 18.07.22):
Enigma to jest port GM8 w open source i jak widać niezbyt się rozwija
BorekBorek (8:18, 15.07.22):
Wtyczki Open Source to chyba najlepsze rozwiązanie w takiej sytuacji. Ciekaw jestem co by się stało z GMS jakby był w całości Open Source
gnysekgnysek (13:02, 14.07.22):
Ale! Te wtyczki do reklam mają być open source, to na pewno community je naprawi, jest nadzieja!
gnysekgnysek (10:08, 14.07.22):
Opera ich ciśnie, to robią
BorekBorek (13:58, 13.07.22):
I nie czepiałbym się, gdyby rzeczywiście wszystko w GM było przynajmniej up-to-date, a nie jest... niestety. To nie czas na zajmowanie się takimi pierdołami, gdy ludzie do nich piszą, że ich gry są blokowane z powodu starych funkcji, albo ferelnej wersji stable programu, która rozpieprza cały projekt....
BorekBorek (13:56, 13.07.22):
Ja osobiście nie jestem zwolennikiem takich rzeczy. Tracą czas na funkcje, które i tak nie pozwolą na nic bardziej rozbudowanego... Znowu Yoyo ma podejście tworzenia programu dla dzieci, zamiast ulepszać obecny system sieciowy i porobić fajne tutoriale uczące programować gry sieciowe, to wolą stworzyć klocek, który sam wszystko załatwi... a dobrze wiemy, że i tak wszystkiego nie załatwi...
AdriannAdriann (10:13, 12.07.22):
Ciekawe jak to rozwiną, z tego co kojarzę narazie można mieć i tak max 4 graczy więc nie ma szału. Ale gdyby było z 10-15 to możnaby się już pokusić o zrobienie jakiejś małej strzelanki :d
gnysekgnysek (20:49, 11.07.22):
Problem polega na tym, ze to jest do takiego multi gdzie między rozgrywkami nic nie przenosisz. Do Aliensów by zadziałało
I am LordI am Lord (18:19, 11.07.22):
Gnysek, Almorę przepisz haha
I am LordI am Lord (18:02, 11.07.22):
Jednolinikowy multik wtf 🤣
UzjelUzjel (20:00, 2.07.22):
Zrobiłem test i działa naprawdę spoko, można wydać coś małego na GXa
gnysekgnysek (19:40, 30.06.22):
Polecam newsa o multiplayerze, fajny przykład jak robić sterowanie w grze w betach GM 2022.6+ (i zapewne w GM 2022.8 już normalnie)
ChellChell (11:14, 29.06.22):
słyszałem już o ludziach biorących kredyty na drugą połówkę, ale o subskrybujących GMa na ich kartę pierwsze słyszę
gnysekgnysek (9:14, 28.06.22):
A nie masz jakiegoś 3D secure czy coś, którego może Stripe nie obsługuje?
IgnatusIgnatus (20:14, 26.06.22):
Hmm coś nie tak z kartą (co dziwne bo są mam na niej inne, działające subskrypcje), na żony zadziałało XD
IgnatusIgnatus (11:41, 26.06.22):
Hmm, Jak mam zapłacić za subskrypcję GM? Polska nie jest obsługiwana? Odrzuca kartę i Gpay..
ThreefThreef (19:08, 25.06.22):
Zmienna keyboard_string zawiera wszystkie klawisze jakie wciśnięto. Możesz ją sobie wyzerować przed wpisywaniem keyboard_string = ""
IgnatusIgnatus (18:03, 25.06.22):
Jak w najprostszy sposób zapisać wpisany z klawiatury tekst jako zmienną którą mogę potem z czymś porównać?
IgnatusIgnatus (21:42, 24.06.22):
Tak. Kwestia jest taka że poza GM nie umiem totalnie nic (a GM używałem 5 lat temu). Może ktoś wie jak się do tego zabrać w GM (w sensie tutoriali lub assetów do kupienia)
ChellChell (17:13, 24.06.22):
podejrzewam że dużo prościej byłoby Ci zrobić to po webowo
ChellChell (17:13, 24.06.22):
hej 👋 dobrze rozumiem że chcesz robić prostą aplikację przeglądarkową w GM?
IgnatusIgnatus (21:39, 23.06.22):
Hello! Mam małą misję. Potrzebuje stworzyć apkę na www która będzie otwierała obrazki po wpisaniu ich dwu-członowej nazwy. To będzie trudne w GM? z 5 lat go nie ruszałem ;p
AdriannAdriann (19:34, 21.06.22):
o, naprawili
gnysekgnysek (16:00, 21.06.22):
Help > Report bug Samo sie nie naprawi Ale dzisiejsza beta ma jakiś fix na Spine.
AdriannAdriann (17:50, 20.06.22):
w sumie nawet nie sprawdzałem gdzie się to zgłasza :o
gnysekgnysek (13:54, 20.06.22):
A zgłoszone?
AdriannAdriann (22:08, 14.06.22):
Ech! Spine dalej nie naprawione :<
HunterHunter (13:36, 8.06.22):
Pytanie do starych wyjadaczy jest jeszcze gdzieś dostępna gra MAGI od TeeGee ?
gnysekgnysek (11:25, 8.06.22):
Ja pamiętam, jak była funkcja draw_image_alpha i po 5-6 grafikach FPS spadał.
expexp (18:27, 7.06.22):
i uruchamiała się jedną sekundę
expexp (18:25, 7.06.22):
łezka w oku się kręci jak wspominam czasy kiedy nowa wersja GM wychodziła raz na x lat i było zero problemów
AdriannAdriann (14:32, 4.06.22):
No i gdzie te aktualizacje:| Popsuli i zostawili
gnysekgnysek (12:24, 30.05.22):
A mogli wydać we wtorek, to jeszcze byłby nadal maj...
gnysekgnysek (12:24, 30.05.22):
Obstawiam, że kolejny raz między ostatnią betą a wydaniem stabilnym dodali "jeszcze dwa małe fixy" i wszystko się sypnęło. Ze spine to jest potwierdzony już błąd.
BorekBorek (20:32, 27.05.22):
Oczywiście jest weekend, także wywalona kiełbasa Jedynie można wrócić do poprzedniej wersji i cieszyć się, że ta wersja akurat nie była wymyagana np. dla nowszych wersji Google API Już raz mnie tak załatwili...
BorekBorek (20:29, 27.05.22):
Ostatnie stable jest bardziej rozwalone niż beta. Większość użytkowników nie może odpalić swoich projektów po wczorajszym stable Kocham GM Dobrze, że nie robiłem aktualizacji...
AdriannAdriann (11:23, 27.05.22):
I postacie ze spine zaczęły dziwnie się zachowywać(nie ruszałem w nich nic poza aktualizacjami na bieżąco) A dziwnie znaczy grafiki na różnych layerach często się nie przełączają mimo że powinny
AdriannAdriann (11:22, 27.05.22):
Mam wrażenie że coś się popsuło po ostatnich aktualizacjach gma Bardzo często nie działa mi room_restart() tj raz odpalę grę i działa raz nie
gnysekgnysek (22:58, 11.05.22):
ale tam 39dll chyba też dział, tylko trzeba było dodać brakujące argumenty z numerem bufora (bo GMS nie umiał już ustawiać niezdefiniowanych zmiennych na 0).
SutikkuSutikku (18:34, 11.05.22):
tfu, gms w ogóle, nie gms2
SutikkuSutikku (18:34, 11.05.22):
jak nauczyłem się korzystać z 39dll, to gms2 wyszedł o i tyle z moich nauk
gnysekgnysek (23:29, 9.05.22):
Pisałem już, że przekompilowałem 39dll do x64 i działa w GMS2 ?
gnysekgnysek (21:28, 28.04.22):
Pusty WP - 30-40mb ramu na 1 request.
ChellChell (14:25, 27.04.22):
narzeczona troche bardziej oblatana w temacie mi powiedziala co tam moge poinstalowac i na co zwrocic uwage zeby to zabezpieczyc, ale wciaz smiech na sali
ChellChell (14:24, 27.04.22):
stawialem ostatnio jeden landing na wp dla klienta (wykonany przez jakiegos zewnetrznego kontraktora), w tydzien jakies boty pozmienialy podstrony
Ankieta
» Kiedy wyjdzie GameMaker 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-2022. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus, © 2017-2022 {=|=} fable_inside();

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