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)
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
4 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 3, ukrytych: 0
Uzjel, Madness, ANtY
Użytkownicy na czacie discord
TO_mek (14:20, 21.11.17):
GMS 1.4 ma eksport do linuxa?
gnysek (12:38, 21.11.17):
W sumie powinienem napisać że słaba.
gnysek (10:51, 21.11.17):
Pełną + moduł. Dlatego napisałem, że oferta średnia.
hgter (0:56, 21.11.17):
Odnosząc się do ogłoszenie gnyska o subscypcji za $39: Tylko jak w tej wersji w "subskrypcji" można rozwiązać moduł na androida? Da się coś taniej? Muszę kupić moduł za 1450 zł? Czy też w tej wersji nie da się z niego skorzystać i muszę kupić pełną+moduł czyli dać 1800 zł?
PsichiX (17:42, 20.11.17):
mieli DLC pod tytulem "kompilacja do kodu natywnego", a biedaki cebulaki meczyc sie z powolnym gmlem xD
Wojo (16:09, 20.11.17):
może jeszcze dlc przyspieszające ładowanie gier?
Wojo (16:08, 20.11.17):
hahaha ten news o nowym gmie pokazuje jak jego poziom upadł na ryj
gnysek (9:37, 20.11.17):
Po prostu każdy sterownik inaczej interpretuje polecenia rysowania linii z directx i ogólnie nikt tego już nie używa w profesjonalnych grach.
gnysek (9:36, 20.11.17):
To nie wina gma tylko kart graficznych. I chyba nawet w dokumentacji jest to opisane czemu tak działa i że własnie lepiej rysować sprite.
hgter (21:40, 19.11.17):
Miałem napisać długi post o skopaniu draw_line w Gm. Ale to nie ma sensu (cyrki jakie w tym wychodzą są nieziemskie). Draw_line nie działa w Gm (działało nawet kurde qbasicu pod dosem) a już pod androidem to co się wyprawia to jakaś paranoja. Jak musisz mieć linię w swoim projekcie to narysuj ją sobie jako sprite.
Adriann (19:29, 19.11.17):
Hi hi
Saus (14:15, 18.11.17):
Siema śmieszki
hgter (10:42, 17.11.17):
Pozmieniałem wszystko na pliki i mam nadzieję, że będzie ok
hgter (10:41, 17.11.17):
Coś chyba nie jest do końca tak z dodawaniem grafik do postów. Wczoraj w nocy dodawałem screeny z gry przez linkowanie (zmieniałem ich wielkość przy pomocy narzędzi edycji w poście). Było wszystko ok, ale teraz jak zajrzałem to screeny wyparowały i tylko linki zostały. Natomiast jeden screen dodany jako plik był ok.
I am Lord (20:02, 16.11.17):
scroll byłby pokrętłem, może to wyglądać spoko
I am Lord (20:01, 16.11.17):
A zobacz w sumie bo nie sprawdzałem w jaki sposób są zrobione scrolle od myszek, tam też na pewno jest enkoder
I am Lord (20:01, 16.11.17):
ale no enkoder jednak fajniejsza sprawa bo nie ma ograniczenia obrotu
I am Lord (20:00, 16.11.17):
A na potencjometrach nie możesz?
Chell (19:13, 16.11.17):
knuje jakiś sprytny zegarek na rpi zero i tak mi zaswitalo ze takie pokrętło byłoby wygodnym inputem
I am Lord (19:08, 16.11.17):
A co konstruujesz?
I am Lord (19:08, 16.11.17):
A jak byś potrzebował liniowe enkodery to takie są np w drukarkach i skanerach
Chell (19:03, 16.11.17):
zawsze coś
I am Lord (18:59, 16.11.17):
w dodatku inkrementalne są tak jak chcesz ale wiesz jaka ich precyzja była
Chell (18:59, 16.11.17):
oo, super myśl, dzięki
I am Lord (18:58, 16.11.17):
skołuj sobie myszkę kulkową, tam są 2 takie enkodery obrotowe.
Chell (18:57, 16.11.17):
coś takiego ze starych komórek kojarzę, że jak normalny rotary encoder jest pionowy i nie da się go obracac jednym palcem tak mi chodzi o taki który jest płaski, wystaje z obudowy urządzenia tylko trochę z boku i można podkręcić
I am Lord (18:57, 16.11.17):
tzn budowa może być z tarczą wewnątrz enkodera a może być tak jak w starych kulkowych myszkach gdzie była tarcza na zewnątrz enkodera
Chell (18:55, 16.11.17):
jednak nie rysuje, lapek padl
I am Lord (18:54, 16.11.17):
no nie czaję o co ci chodzi z zatapianiem
Chell (18:54, 16.11.17):
już rysuje o co mi chodzi
I am Lord (18:53, 16.11.17):
ale to nadal liniowy tylko że się zwija
I am Lord (18:52, 16.11.17):
No to nie wiem, są jeszcze takie zwijane
Chell (18:51, 16.11.17):
bez max i min wartości w sensie
Chell (18:50, 16.11.17):
ale nie, bo wciąż zależy mi na samej czynności kręcenia, i żeby nie określał absolutnej wartości tylko inkrementowal i dekrementowal
Chell (18:50, 16.11.17):
masz refleks xD
I am Lord (18:48, 16.11.17):
encoder liniowy?
Chell (18:48, 16.11.17):
taki żeby można go było zatopić w sprzęcie od boku
Chell (18:47, 16.11.17):
ej, jak się nazywa taki rotary encoder, ale płaski i szeroki?
I am Lord (18:47, 16.11.17):
Uzjel no ale jak to? Przecież instancja może zmieniać sobie sprite_index no to jak wtedy image_speed się dostosować ma?
ANtY (15:41, 16.11.17):
elo co tam
exp (23:18, 15.11.17):
w sumie fajna rzecz dla nowych użytkowników, mimo, że starzy muszą zmieniać nawyki
Uzjel (16:03, 15.11.17):
(GMS2)
PsichiX (15:56, 15.11.17):
wat D:
Uzjel (15:51, 15.11.17):
Prędkość podglądu w Sprite Editorze ma wpływ na prędkość animacji w grze. Moje życie straciło sens
hgter (2:15, 15.11.17):
Jak rzekłem tak zrobiłem. Obejście problemu wrzuciłem w: forum.gmclan.or...nowości-z-forum
hgter (0:30, 15.11.17):
Cóż rzec. Też sam nigdy o tym nie pamiętam - i potem mam jak Ty. Już nawet myślałem żeby jakiś skrypt napisać czy coś.
Sutikku (0:02, 15.11.17):
ta ale to trzeba pamiętać, a ja wejdę, naklikam ostatnie pięć nowości, a potem kappa
hgter (23:03, 14.11.17):
Można też dać f5 zaraz po wejściu. Wtedy kółeczko działa "od razu"
SimianVirus7 (22:18, 14.11.17):
ale wystarczy taki tip zrobić raz i później kółeczkiem elegancko możesz otwierać nowe karty
Sutikku (22:13, 14.11.17):
mam zwyczaj klikania kółeczkiem od myszki żeby przerzuciło na nową kartę, a teraz muszę zmieniać nawyki ;/
Ankieta
» Jakie kursy najchętniej widziałbyś na stronie ?
GM Studio
GM Studio 2
Godot
Construct

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!
© 2002-2017 Ranmus (ranmus.pl), © 2017 {=|=} fable_inside();

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