Trudność z biblioteką SDL przy wyświetlaniu tekstu

0

Mam problem z obsula biblioteki SDL:( A mianowicie z wyswietlaniem tekstu, bo inne elementy działaja bez zarzutu. Podczas proby odpalenia programu wyskakuje blad: project My Application raised exception class External sigsegv at address 71002A95. A tu kod programu

PROGRAM chap5;

USES SDL,SDL_TTF;

VAR
screen, fontface:pSDL_SURFACE;
loaded_font:pointer;
colour_font, colour_font2:pSDL_COLOR;
i:BYTE;

BEGIN
SDL_INIT(SDL_INIT_VIDEO);
screen:=SDL_SETVIDEOMODE(400,200,32,SDL_SWSURFACE);
IF screen=NIL THEN HALT;

IF TTF_INIT=-1 THEN HALT;
loaded_font:=TTF_OPENFONT('C:\Windows\Fonts\Arial\ariblk.ttf',5);

NEW(colour_font);
NEW(colour_font2);
colour_font^.r:=255; colour_font^.g:=0;    colour_font^.b:=0;
colour_font2^.r:=0;  colour_font2^.g:=255; colour_font2^.b:=255;

fontface:=TTF_RENDERTEXT_SHADED(loaded_font,'HELLO',colour_font^,colour_font2^);

SDL_BLITSURFACE(fontface,NIL,screen,NIL);
SDL_FLIP(screen);
READLN;

DISPOSE(colour_font);
DISPOSE(colour_font2);
SDL_FREESURFACE(screen);
SDL_FREESURFACE(fontface);
TTF_CLOSEFONT(loaded_font);
TTF_QUIT;
SDL_QUIT;
END.

Problem sprawia ta linijka

fontface:=TTF_RENDERTEXT_SHADED(loaded_font,'HELLO',colour_font^,colour_font2^); 

gdyz po jej zakomentowaniu program sie uruchamia bez bledu(tylko wtedy sie rzecz jasna napis nie wyswietla)

Mam Win 7, pisze na Lazarusie. Czy ktos pomoze? Bede bardzo wdzieczny

poprawienie tytułu wątku + dodanie znaczników <code class="pascal"> - fp

0

Sprawdź co zwraca funkcja TTF_RENDERTEXT_SHADED, tak jak powinno się to robić i ewentualnie obsłuż błąd, bo najwidoczniej na czymś się ona wywala; Zobacz pod ten link: http://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf_47.html

I nie zapominaj o wstawianiu kodu w znaczniki kolorujące składnię.

0
if(TTF_RENDERTEXT_SHADED(loaded_font,'HELLO',colour_font^,colour_font2^)=NIL) then HALT; 

o to chodzi?

nic,dalej to samo

0

Chodzi mi o tą linijkę:

fontface:=TTF_RENDERTEXT_SHADED(loaded_font,'HELLO',colour_font^,colour_font2^);

Po niej powinieneś sprawdzić, czy funkcja zwróciła Nil czy nie, np. tak:

fontface := TTF_RenderText_Shaded(loaded_font, 'HELLO', colour_font^, colour_font2^);

if fontface = nil then
  // obsługa błędu renderowania
else
begin
  SDL_BlitSurface(fontface, NIL, screen, NIL);
  SDL_Flip(screen);

  // ...

  SDL_FreeSurface(fontface);
end;

i sprawdź jak działa program; Jeśli nadal otrzymujesz ten sam błąd to sprawdź czy podajesz prawidłowe parametry;

EDIT: A to Readln można używać w trybie graficznym SDL?

0

zrobilem te obslugi i wyszlo na to ze TTF_OPENfONT zwraca NIL. tylko dlaczego? sciezka jest ok

edit:mozna uzywac, wtedy napis wyswietli sie na konsoli a nie na wyswietlanym screenie.

0

Zmienna loaded_font powinna być typu TTF_Font, tak jak sugeruje dokumentacja; Sugeruję skopiowanie pliku z fontem do katalogu z programem i spróbowanie w ten sposób (podając ścieżkę względną); Być może nie masz dostępu do katalogu C:\Windows\Fonts, dlatego zawsze zwraca Nil.

0

identifier not found "TTF_Font" , sciagnalem sobie czcionke i wstawilem do folderu z programem, podalem sciezke wzgledna (czyli 'nazwa.ttf' ?) i program odpala sie, ale czcionka sie nie pojawia a po zakonczeniu wyskakuje
".. class External SIGSEGV at address 68122A84"

0

identifier not found "TTF_Font"

Czyli albo nie dodałeś odpowiedniego modułu do listy, albo moduły nie są zgodne z dokumentacją;

sciagnalem sobie czcionke i wstawilem do folderu z programem, podalem sciezke wzgledna (czyli 'nazwa.ttf' ?) [...]

Tak, ścieżka względna tak wygląda - nie posiada litery dysku ani pełnej lokalizacji, tylko wersję skróconą względem pliku wykonywalnego;

[...] i program odpala sie, ale czcionka sie nie pojawia a po zakonczeniu wyskakuje
".. class External SIGSEGV at address 68122A84"

Jaka instrukcja powoduje ww. błąd? To ważne.

0

jak to sprawdzic ktora?

0

Użyj debugger.

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