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
Treść artykułu
O błędach i ich przyczynach
autor: Misiek999 (28.12.08) | czas czytania: 7 minut, 6 sekund
Podczas pracy z Game Makerem, możemy natrafić na różnego rodzaju błędy. Niektóre możemy zignorować podczas wyświetlenia - jednak niektóre wymuszają wyłączenie gry. W tym artykule postaram się opisać wyskakujące błędy, ich przyczynę oraz jak je naprawiać.

Error Messages
W większości przypadków, okno z informacją o błędzie wskaże nam miejsce gdzie takowy wystąpił - przez co nie powinniśmy mieć problemów z wyszukaniem problemu.



1 - Numer akcji, w której wystąpił błąd ( "1" to ta na samej górze eventu ).
2 - Event ( wydarzenie ), w jakim wystąpił błąd. W tym wypadku jest to step.
3 - Informacja, w jakim obiekcie wystąpił błąd ( w tym wypadku object0 ).
4 - Linia w jakiej wykryto błąd. W tym wypadku jest to pierwsza linia kodu. Używając wbudowanego edytora, można bez problemu "skoczyć" do szukanej linii używając "Go to a particular line".
5 - Część kodu, w którym wykryto błąd.
6 - Opis błędu. W tym wypadku nieznana zmienna.
7 - Przerywamy działanie gry.
8 - Ignorujemy napotkany błąd - nie zawsze jest to jednak skuteczne.
9 - Kopiujemy cały raport do schowka.
10 - Czyścimy okno błędu.

Rodzaje Błędów
Każdemu, nawet najlepszemu mistrzowi nie raz wyskoczą różnego rodzaju błędy. W większości będą to problemy łatwe do naprawienia, drobne przeoczenia. Zdąża się też jednak i takie, nad którymi będziemy siedzieć i głowić się jak go rozwiązać.

Błąd: Unknown variable <nazwa>.
Tłumaczenie: Nieznana zmienna <nazwa>.
Opis: Musimy pamiętać, że przed jakąkolwiek operacją z użyciem zmiennej, musimy ją uprzednio zadeklarować. Zazwyczaj robimy to w create, lecz nie jest to konieczne. Zasada jest taka, że przed użyciem zmiennej musimy ją zadeklarować, nadać jakąś początkową wartość. Robimy to w taki sposób: nazwa = dowolna_wartość. Innym rozwiązaniem problemu jest zaznaczenie w ustawieniach Game Makera opcji "Treat uninitialized variables as value 0". Znajdziemy ją w Global Game Settings > Errors.
Możliwość zignorowania: Istnieje. Ale w tym wypadku ignorowanie błędu jest bez sensu - gdyż błąd będzie się wyświetlał tak długo, dopóki zmienna nie zostanie wykryta. Może to nastąpić po jakimś czasie, gdy mamy ustawiony np. alarm, gdzie została zadeklarowana zmienna.

Błąd: Division by 0.
Tłumaczenie: Dzielenie przez zero.
Opis: W jakieś operacji matematycznej, chcemy podzielić dowolną liczbę przez zero. W programowaniu nie jest to dopuszczalne. Pozostaje nam tylko zmiana dzielnika liczby.
Możliwość zignorowania: Nie istnieje.

Błąd: Unknown variable "nazwa" or array index out of bounds.
Tłumaczenie: Nieznana zmienna "nazwa", lub indeks tablicy poza jej granicami.
Opis: Tworząc tablice, ustalamy również jej granice. Możemy ją powiększać, dopisując kolejne wartości, ale nie możemy bezpośrednio odwoływać się do indeksu poza jej granicami. Przykładowo : Tablica o nazwie "array" ma rozmiar 8, więc nie możemy odwołać się do indeksu 9 : zmienna = array[9]. - przed wykonaniem tej operacji musi być dopisana tam jakaś wartość np. array[9] = 5. Aby powiększyć tablicę.
Możliwość zignorowania: Istnieje. Po zignorowaniu, Game Maker nie wykona po prostu obliczeń.

Błąd: Negative array index.
Tłumaczenie: Negatywny indeks tablicy.
Opis: Tablica nie może mieć ujemnego indeksu - przeszukaj kod. Często zdarza się w przypadku, gdy jakaś zmienna posiada wartość ujemną, a my próbujemy za jej pomocą odwołać się do jakiegoś indeksu tablicy ( tablica[zmienna] ).
Możliwość zignorowania: Istnieje. Po zignorowaniu, Game Maker nie wykona obliczeń.

Błąd: Error defining an external function.
Tłumaczenie: Błąd w definiowaniu zewnętrznej funkcji.
Opis: Błąd ten głownie występuje, gdy korzystamy z funkcji biblioteki dll, a nie umieściliśmy jej w tym samym folderze co gra. Większość bibliotek posiada również tzw. Funkcję inicjalizującą, którą musi być wykonana przed używaniem reszty funkcji. Możliwe, że o niej zapomniałeś. Błąd może występować również w innych wypadkach - ale jak nie jesteśmy twórcą danego dll'a nic więcej nie możemy zrobić.
Możliwość zignorowania: Istnieje. Tak jak w wypadku "Unknown variable <nazwa>", Game Maker nie będzie dawał nam spokoju póki problem nie będzie rozwiązany. Krótko mówiąc "Ignore" nic nam nie da.

Błąd: Wrong number of arguments to function or script.
Tłumaczenie: Zła liczba argumentów w funkcji bądź skrypcie.
Opis: Do większości funkcji możemy wpisać tylko określoną liczbę argumentów, niezbędną do wykonania obliczeń. Jeśli jest ona nieprawidłowa - zostaniemy o tym poinformowani.
Możliwość zignorowania: Nie istnieje.

Błąd: Cannot compare arguments.
Tłumaczenie: Nie można porównać argumentów.
Opis: Pamiętajmy, że porównywać można ze sobą zmienne tylko tego samego typu. W GML istnieją dwa typy : real ( liczby rzeczywiste ) oraz string ( ciąg znaków ), jeśli zmienna "a" będzie liczbą, a zmienna "b" ciągiem znaków, kod: if a == b { game_end(); } będzie nieprawidłowy.
Możliwość zignorowania: Nie istnieje.

Błąd: Unexpected symbol in expression.
Tłumaczenie: Niepożądany symbol w wyrażeniu.
Opis: Przyczyną ich występowania może być pomyłka bądź też niewystarczająca wiedza GML. Możliwości jest bardzo wiele więc nie będę ich wszystkich wymieniał. Unikniemy ich - jeśli dobrze poznamy składnie oraz zasady panujące w tym języku. Symbole takie jak !, ^, ^^, & itd. Używamy w konkretnych sytuacjach - nie możemy natomiast stawiać ich wszędzie gdzie nam się podoba. Odsyłam do kursów GML.
Możliwość zignorowania: Nie istnieje.

Błąd: Wrong type of arguments to <symbol>.
Tłumaczenie: Złe typy argumentów dla <symbolu>.
Opis: Przy operacjach takich dodawanie (+), odejmowanie ( - ), dzielenie (/), mnożenie ( * ), dzielenie całkowite ( div ) oraz reszta z dzielenia (mod ) - używać możemy tylko liczb rzeczywistych ( tzn. po lewej i po prawej stronie tego symbolu muszą znaleźć się zmienne typu real. Oprócz tego znakiem "+" możemy łączyć ciągi znaków.
Możliwość zignorowania: Nie istnieje.

Błąd: Symbol <symbol> expected.
Tłumaczenie: Wymagany symbol <symbol>.
Opis: Pojawia się, kiedy zapomnieliśmy dopisać jakiegoś znaku np. zamknąć nawiasu podczas pisania funkcji, Zamknąć blok klamrą.
Możliwość zignorowania: Nie istnieje.

Może też się zdarzyć, że twój kod będzie poprawnie napisany - a gra będzie się ciągle wyłączać. Powodem tego mogą być zbyt obciążające obliczenia bądź funkcje, z którymi Game Maker nie może sobie poradzić. Przykładem może być funkcja draw_getpixel(), którą należy stosować z umiarem.

Kontrola nad błędami
Istnieje kilka opcji, które mogą pomóc nam w kontrolowaniu błędów. Znajdziemy je wchodząc do "Global Game Settings" w zakładce "Errors".



1 - Jeśli to odznaczymy, nie będą wyświetlane okienka z błędami. Jeśli błąd nie może być zignorowany - gra zostaje wyłączona.
2 - Po zaznaczeniu, każdy błąd zostanie zapisany do pliku game_errors.log.
3 - Po wystąpieniu jakiegokolwiek błędu , Game Maker przerywa działanie gry.
4 - Wszystkim nieznanym zmiennym, które wystąpiły w kodzie - zostaje przypisana wartość 0 ( patrz tabelka - Unknown variable "nazwa" ).

Wersja PDF
głosów: 13 | ocena: 8.54 oceń zasób | dodał: PsichiX
Komentarze
stron: 21

2


av

PsichiX (12:55, 27.04.2010)

zeby tylko srednik - and tez wywal albo then wstaw chociaz

av

Misiek999 (15:17, 27.04.2010)

yyy, a czemu tak nie może być ? ;p sprawdza czy kakao false jest.

av

Assassin (16:28, 27.04.2010)

YXE miał na myśli, że kakao=false to skutek, a nie przyczyna, dlatego powiedział: wywalić and (a opcjonalnie dać then) .

av

Mentoss (17:57, 27.04.2010)

nie, nie kakao to warunek. wywalenie srednika pomogło

av

Ignifil (14:24, 1.08.2010)

Czemu jak mam w create name = Andrzej to mi wyskakuje taki błąd?:

ERROR in
action number 1
of Create Event
for object object0:

Error in code at line 1:
name = Andrzej

at position 8: Unknown variable Andrzej

av

PsichiX (14:54, 1.08.2010)

name = "Andrzej";
string wymaga cudzysłowia

av

wikku9 (14:54, 1.08.2010)

musisz Andrzej dać w cudzysłowiu.

av

Ignifil (16:00, 1.08.2010)

okej dzięki

av

TheMarcQ (19:32, 4.08.2010)

" Unknown variable Andrzej"
jak nie znasz angielskiego to odsyłam do
translate.google.pl

stron: 21

2



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

Nie masz konta? Zarejestruj się
Użytkownicy on-line
7 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 6, userów: 1, ukrytych: 0
ANtY
Użytkownicy na czacie discord
gnysek (13:58, 18.02.19):
bo tam są głównie XMLe, wiec kazdy edytor do www się nada
gnysek (13:58, 18.02.19):
ja otwierałem w phpstormie i robiłem replace
nowy_user (13:45, 18.02.19):
BTW. Na forum YoYo coraz większe naciski ze strony użytkowników. Podoba mi się to, że użytkownicy wywierają presję na Yoyo, aby produkt i forum dalej się rozwijały. Nie podoba mi się natomiast to, że Yoyo samo nie wychodzi z inicjatywą :/
nowy_user (13:44, 18.02.19):
Dzięki za info, postaram się jeszcze pokombinować z GMEdit , może tam będzie ta opcja.
gnysek (13:28, 18.02.19):
a faktycznie, nie ma globalnego replace, to w GMS2 tylko, trzeba robić globalny find i ręcznie zmieniać
nowy_user (10:30, 18.02.19):
Niestety, w edit jest opcja Find a resource (Ctrl+R) ale to pozwala wyszukiwać np. całe obiekty sprity itd. Nie do końca mi o to chodziło. To, co ja bym chciał zrobić to np. podmienić nazwę jednej zmiennej, która jest dość nieintuicyjna, a pojawia się bardzo często, i jest porozsiewana po różnych obiektach i skryptach. Chciałbym móc podmienić nazwę tej zmiennej we wszystkich miejscach, za jednym zamachem...
gnysek (10:05, 18.02.19):
wejdź do menu "Edit" i tam chyba będzie, wraz ze skrótem.
nowy_user (9:24, 18.02.19):
Panowie, prosta sprawa, nie wiem czy czegoś nie widzę przez jakieś chwilowe zaćmienie umysłu, ale gdzie w GM1.4 jest opcja globalna 'search and replace' ? Lokalnie, dla danego obiektu pojawia sie po wciśnięciu ctrl+F , natomiast globalnie, jak wcisnę ctrl+shit+F to pojawia się sama wyszukiwarka, bez opcji replace... Chciałem zmienić nazwę jednej zmiennej, chyba nie będę musiał tego robić ręcznie?
Konrad-GM (0:12, 18.02.19):
Yup, dokładnie tak powinno chodzić, potem jest trochę więcej różnorodnych pułapek, więc robi się coraz trudniejsze
I am Lord (0:06, 18.02.19):
ale aż tak? www.youtube.com...eature=youtu.be
Konrad-GM (23:58, 17.02.19):
Ten kurczak szybko chodzi, więc to ficzer jest, żeby za łatwo nie dało się przejść gry
I am Lord (23:52, 17.02.19):
ok teraz 8, ale nie wiem czy u mnie czasem nie za szybko chodzi ten kurczak
I am Lord (23:50, 17.02.19):
5 jajaec zdobyłem
I am Lord (23:46, 17.02.19):
12 minut zostało a nie mam game playu jeszcze tylko sama grafika
I am Lord (23:46, 17.02.19):
ja nie zdąrze
Konrad-GM (23:41, 17.02.19):
Dodałem grę na ligę, ale zczaiłem się dopiero teraz, że czarny kolor to przecież też kolor kek, nie bijcie
gnysek (10:35, 15.02.19):
jak jeszcze gdzieś zostały, dawajcie znać
I am Lord (17:40, 14.02.19):
to się nie sprawdzi przy takiej małej ilości osób. Żadne posty się nie gubią tutaj w tłumie żeby je wyróżniać
I am Lord (17:40, 14.02.19):
wyłącz te oceny
gnysek (10:29, 14.02.19):
jeszcze wieczorem zajrzę w kod, jak nie znajdę żadnej opcji to wyłączę ocenianie w tych działach i tyle, i tak mało kto tego potrzebuje, to nie stackoverflow
gnysek (0:46, 14.02.19):
musiałbym chyba wyłączyć oceny
nowy_user (20:43, 13.02.19):
To prawda, jest to irytujące.
I am Lord (20:11, 13.02.19):
da się wymusić żeby to cholerne sortowanie po ocenie postu nie było domyślne? Straszliwie mnie wnerwia
gnysek (11:50, 13.02.19):
tzn. wcześniej też na forach się sporo działo, ale nie miałem internetu to nie widziałem
gnysek (11:49, 13.02.19):
Pamiętam, lata 2003-2008 to chyba takie najbujniejsze. Aż weszły facebooki i smartfony.
Temporal (17:18, 12.02.19):
jestem człowiekiem starej daty i żyje czasami, gdy wszystko działo się na forach internetowych
Temporal (17:17, 12.02.19):
wiem co to Discord, tak tylko głupoty wypisuje
I am Lord (17:12, 12.02.19):
discord to chat a nie portal społecznościowy
I am Lord (17:05, 12.02.19):
bo rozmowy się toczą na discordzie tylko
Temporal (16:51, 12.02.19):
boję się Discordów, Facebooków i Instagramów
SimianVirus7 (22:59, 11.02.19):
tu zwykle jest cicho z tego co wiem na discordzie więcej się dzieje
nowy_user (15:37, 11.02.19):
Wszyscy piszą gry, nik nie ma czasu na pogawędki
Temporal (15:33, 11.02.19):
co tu tak cicho?
nowy_user (17:20, 9.02.19):
Morał z tych historii: Róbcie backupy
Temporal (15:39, 9.02.19):
brzmi jak dobra copypasta
Konrad-GM (14:59, 9.02.19):
Kiedyś robiłem grę w Unity, crash co chwila, a potem ostatni crash usunął mi sporą część assetów w jakiś dziwny sposób, że nie mogłem odzyskać większości kodu czy modeli a kopia mocno była nieaktualna, usunąłem Unity i od tamtej pory nigdy nie wróciłem xD
I am Lord (13:52, 9.02.19):
miałem strzelankę topdown z generowanymi jaskiniami w planach
I am Lord (13:51, 9.02.19):
Ja nie oddałem na ligę bo mi crash GMS2 zepsuł projekt i się wkurzylem. Odinstalowałem go
Temporal (10:13, 9.02.19):
kiedy ten GM mi się znudzi? cały czas jestem pod wrażeniem jak dobry jest ten soft. Oczywiście ma jakieś swoje bolączki i są bardziej zaawansowane silniki, ale to wciąż doskonałe narzędzie zarówno dla początkujących twórców gier jak i zaawansowanych. Tworzenie gier w tym środowisku to sama przyjemność
gnysek (22:03, 8.02.19):
Nie wyjdzie. Jest plan na cały rok rozpisany i nie ma tam gms3. A zniżki były co roku.
nowy_user (18:22, 8.02.19):
Pojawiła się nowa promocja, Lunar Sale, nawet do 50% zniżki na GMS2 Mobile. Chyba niedługo wyjdzie GMS3, skoro co chwila nas zasypują promocjami
nowy_user (22:05, 5.02.19):
Dzięki, wyglada bardzo solidnie, chyba z niego skorzystam
gnysek (17:03, 5.02.19):
mydevil.net po tym jak hekko ceny podniosło
nowy_user (14:40, 5.02.19):
Hej, jaki niedrogi i dobry hosting polecacie do prostego landing Page’a, na którym mógłbym zaprezentować apkę zrobioną w GM? Najlepiej taki, który obsługuje WordPressa, bo bardzo do gustu przypadła mi wtyczka Elementor Page Builder
Sutikku (22:58, 4.02.19):
dziury w głowie
Sutikku (22:58, 4.02.19):
zapomniałem skończyć gierkę na lige .-.
SimianVirus7 (17:35, 4.02.19):
Myślę, że parę dobrych duszyczek by się znalazło i ufundowało nagrody. Jeśli pomysł się spodoba, ja również mogę dorzucić coś od siebie
SimianVirus7 (17:33, 4.02.19):
Można by zrobić jakiś worek gier (ale nie śmieciowych). Human: fall flat, Hollow Knight, Bioshock Inifite, Gothic Universe Edition. To wszystko dobre gry za małą cenę <20zł
Dester (17:13, 4.02.19):
nagrody na Steam na pewno były by bardzo motywujące
Dester (16:53, 4.02.19):
temat był za trudny
Ankieta
» Ile powinny trwać tury Ligi 24?
24h
48h
54h (piątek od 18:00)
7 dni
inna długość (podałem w komentarzu ankiety)

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.01788 sekund ] [ Liczba zapytań MySQL: 13 ]