Wyłączenie komunikatu o błędach.

0

Napisałem prostą grę na konkurs. Jest ona 5-cio poziomowa i każdy poziom ma oddzielny Unit. Każdy poziom ma procedurę LevelReset, która jest wywoływana po skończeniu się czasu. W 1,2,3 i 5 poziomie wszystko jest ok, ale w 4 wyświetla mi błąd: "Access violation at address 004341FF in module 'Game.exe'. Read of address 00000057." Po zamknięciu komunikatu wszystko działa tak jak powinno. I stąd moje dwa pytania.

  1. Czy da się jakoś ominąć wyświetlanie tego błędu?
  2. Co to jest w ogóle za błąd?
0

Nie wiem czy to pomoże, ale spróbuj dodać komendę (jeżeli masz memo): "Memo.Lines.Clear;", innym użytkownikom to pomogło, sprawdź również czy jeżeli masz jakieś tablice, bazy danych, pliki ini itp. czy są one wywoływane komendą ...create. Ustaw również tryb zgodności (np. w Windows XP SP3), oraz przeanalizuj kod programu.

No i sprawdź ten link: http://bit.ly/wmV8HJ, na pewno Ci pomoże :)

0

spróbuj dodać komendę (jeżeli masz memo): "Memo.Lines.Clear;"

Ustaw również tryb zgodności

Nie no taka forma pomocy mnie rozwala...

Czy da się jakoś ominąć wyświetlanie tego błędu?

O wyjątkach poczytaj. Tak da się.

Co to jest w ogóle za błąd?

Ten błąd znaczy że coś źle zakodziłeś i coś się kończy błędem który debugger ci łapie, w nadzei że z niego skorzystasz, ale niestety, nie wiesz co to debugger, więc też ci się przyda żeby znaleźć błąd.

Lekturka:
Debugowanie
Wyjątki

0
RadekPL napisał(a)
  1. Czy da się jakoś ominąć wyświetlanie tego błędu?

Teoretycznie da się, bo wystarczy zastąpić wadliwy kod lepszym - bezbłędnym; Jeżeli nie jesteś w stanie rozpoznać dokładnie błędu (a raczej komunikatu debuger'a) - zastosuj blok try .. except .. end i funkcją GetLastError pobierz numer błedu, po czym sprawdź w dokumentacji czego się tyczy; Wyjątki to piękna sprawa i tak jak pisze @-123 zalecane jest skorzystanie z nich, jeśli nie znasz jeszcze obsługi debuger'a;

RadekPL napisał(a)
  1. Co to jest w ogóle za błąd?

Dosłownie - naruszenie zasad dostępu do pomięci; Może odnosić się do bardzo wielu przypadków, więc jeśli nie chcesz podać kodu, który go powoduje określenie przyczyny będzie awykonalne;


Co do samej konstrukcji gry:

RadekPL napisał(a)

Jest ona 5-cio poziomowa i każdy poziom ma oddzielny Unit.

((Dziwna) or (MałoUniwersalna and Problematyczna)) konstrukcja; Każdy poziom (level) gry powinieneś trzymać w osobnym pliku (module, pliku), a procedury sterujące mieć uniwersalne dla każdego; Gdybyś na początku zaprojektował poprawnie konstrukcję nie miałbyś problemu z tym, bo lepiej poprawić jedną procedurę, niż dublować ją dla każdego poziomu; Na pewno istnieje możliwość stworzenia jednej procedury resetującej dla wszystkich poziomów, a z kolei informacje o każdym przechowywać w specjalnie przygotowanych plikach o określonej strukturze;

Będąc jeszcze w szkole bawiłem się w TP (!!!) w pisanie gry, w której chodziło się znakiem X po ekranie, na którym wyrysowany był labirynt; Można było wchodzić w "portale" i przenosić się do kolejnych "pomieszczeń", które były po prostu innym małym labiryntem; Każdy z nich był zapisany w osobnym pliku; Były tam nie tylko informacje o współrzędnych portali (drzwi), ale także graficzny układ ścian labiryntu i inne ciakwostki; Jednak procedury były uniwersalne dla każdego poziomu, czy to rysująca labirynt, czy sprawdzająca współrzędne ścian, portali, pieniążków i innych gówienek do zbierania; Dzięki temu mogłem dowolnie rozbudowywać grę w kolejne pomieszczenia nie ruszając w ogóle kodu programu; Gra sama pobierała ilość poziomów i rysowała ich mapę; Tyle, że trochę zaszalałem z ilością poziomów i po paru dniach zrobiło się ich ponad sto, tak że odnalezienie się w labiryncie zaczęło być tak trudne, że prawie niemożliwe... Zastanów się czy można poprawić kod gry tak, by było w niej jak najmniej powtarzających się bloków kodu (polecam: DRY & KISS);

0

Dzieki wszystkim za rady, ale już sobie poradziłem. Z kodem było wszystko ok, tylko przy zapisywaniu formy komponent gracz z jakiegoś powodu zmienił nazwę na Image12. Kompilator nie pokazywał błędu, bo w sekcji var było to zadeklarowane: gracz: TImage;. Teraz już wszystko działa i gra może w końcu pójść na ten konkurs.

1 użytkowników online, w tym zalogowanych: 0, gości: 1