Funktion funkt nicht


Beltar

Member
Joined
Feb 13, 2007
Messages
214
Age
34
Location
Stein (nähe St. Pölten(A))
ICQ
232357654
LOCATION
Stein (nähe St. Pölten(A))
Code:
void textSdl(int x, int y, int width, int height, char * path, int size, int color, std::string str)
 {
     SDL_Rect dst;
     setColorSdl(color);

     SDL_Color SdlColor = {re, gr, bl, 255};
     TextColor = SdlColor;

     if (width > 10 && (x + width) <screen>w)
         textWidth = width;
     else
         textWidth = screen->w - x;

     if (height > 0 && (y + height) <screen>h)
         textHeight = height;
     else
         textHeight = screen->h - y;

     Font = TTF_OpenFont(path, size);
     if (Font == NULL)
     {
         printf("Can't load font: %s", path);
     }

     screenBuffer = NULL;

     ChangeText(str);

     if (Font != NULL && text != "")
     {
         dst.x = x;
         dst.y = y;

         SDL_BlitSurface(screenBuffer, NULL, screen, &dst);
     }
     TTF_CloseFont(Font);
 }


Aufruf
Code:
textSdl(30, 30, 140, 20, "./Data/arial.ttf",16, WHITE, "Franz");

Diese funktion habe ich aus der SDL header meiner Schule kopiert. bei anderen Programmen die ich geschrieben habe hat sie schon funktioniert.
Wenn ich es am Computer starte kommt: Can't load font: xxx
Die Datei existiert aber in diesem Pfad und ich habe es auch schon im gleichen Verzeichniss probiert.
Hat wer einen Ahnung was da nicht passt?

mfg
Beltar
 
Elektranox said:
http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,37,1188

Probier mal aus, ob das bei dir geht... wenn nicht liegts an deinem SDL

Das funktioniert: mitte ein text wo man mit den Joystick hinmuss oder sollte es noch was konnen?
 
Programmierst du unter Windows?

Wenn ja liegts am / und in diesem Fall vermutlich zusaetzlich noch an ./

Versuchs mal mit:

textSdl(30, 30, 140, 20, "Data\\arial.ttf",16, WHITE, "Franz");

bzw. aufm gp2x dann

textSdl(30, 30, 140, 20, "Data/arial.ttf",16, WHITE, "Franz");

Ausserdem auf Gross-/Kleinschreibung achten.

Tip:

Am Anfang des im SDK mitgelieferten Beispiels gibts diesen Block:
Code:
<i>
</i>#ifdef GP2X
/* Only use GP2X code here */
#endif

#ifdef WIN32
/* Only use Windows code here */
#endif

Mach da:
Code:
<i>
</i>#ifdef GP2X
#define PATH_SEPARATOR "/"
#endif

#ifdef WIN32
#define PATH_SEPARATOR "\\"
#endif

Und generier dann alle Pfade via:

sprintf(buffer, "Data%sfont.ttf",PATH_SEPARATOR);

Einfacher gehts natuerlich noch wenn du c++ dafuer verwendest und deiner Funktion std::string uebergibst, dann kannst du die Funktion einfach so aufrufen:

textSdl(30, 30, 140, 20, "Data"+TEXT_SEPARATOR+"arial.ttf",16, WHITE, "Franz");
 
G.o.D said:
Programmierst du unter Windows?

Wenn ja liegts am / und in diesem Fall vermutlich zusaetzlich noch an ./

Versuchs mal mit:

textSdl(30, 30, 140, 20, "Data\\arial.ttf",16, WHITE, "Franz");

bzw. aufm gp2x dann

textSdl(30, 30, 140, 20, "Data/arial.ttf",16, WHITE, "Franz");

Ausserdem auf Gross-/Kleinschreibung achten.

Tip:

Am Anfang des im SDK mitgelieferten Beispiels gibts diesen Block:
Code:
<i>
</i>#ifdef GP2X
/* Only use GP2X code here */
#endif

#ifdef WIN32
/* Only use Windows code here */
#endif

Mach da:
Code:
<i>
</i>#ifdef GP2X
#define PATH_SEPARATOR "/"
#endif

#ifdef WIN32
#define PATH_SEPARATOR "\"
#endif

Und generier dann alle Pfade via:

sprintf(buffer, "Data%sfont.ttf",PATH_SEPARATOR);

Einfacher gehts natuerlich noch wenn du c++ dafuer verwendest und deiner Funktion std::string uebergibst, dann kannst du die Funktion einfach so aufrufen:

textSdl(30, 30, 140, 20, "Data"+TEXT_SEPARATOR+"arial.ttf",16, WHITE, "Franz");

1.) ja ich programmiere unter Windows

2.) mit "Data/arial.ttf" gehts nicht //hätt mich gewundert (./ gehört doch davor oder)

3.) das mit den defines sollte ich mir mal anschauen daweil gebe ich alle pfade für den Gp2x an.

4.) ich benutze C++

5.) ich habe mir die zeilen von buttongame kopiert und es geht auch nicht

edit:
andere Pfade funktionieren auch
 
Beltar said:
2.) mit "Data/arial.ttf" gehts nicht //hätt mich gewundert (./ gehört doch davor oder)

sorry, da warst du zu schnell ;)

Ich habs noch mal editiert. Unter Windows natuerlich "Data\\arial.ttf"

./ heisst unter Unix nur soviel wie "vom aktuellen Verzeichnis aus", kann man beim gp2x auch weglassen, weil immer alles vom aktuellen Verzeichnis aus gewertet wird, solange du nicht mit / beginnst. Da es unter Windows meines Wissens kein Gegenstueck zu ./ gibt ist es also einfacher das gleich wegzulassen.
 
G.o.D said:
Beltar said:
2.) mit "Data/arial.ttf" gehts nicht //hätt mich gewundert (./ gehört doch davor oder)

sorry, da warst du zu schnell ;)

Ich habs noch mal editiert. Unter Windows natuerlich "Data\\arial.ttf"

./ heisst unter Unix nur soviel wie "vom aktuellen Verzeichnis aus", kann man beim gp2x auch weglassen, weil immer alles vom aktuellen Verzeichnis aus gewertet wird, solange du nicht mit / beginnst. Da es unter Windows meines Wissens kein Gegenstueck zu ./ gibt ist es also einfacher das gleich wegzulassen.

./ entsprich im Windows meines wissens .\\
jedenfalls mach ich das immer so

edit:
Wenn ich das gleich ins root vom Programm lege dann muss ich ja nur
"arial.ttf" schreiben oder?
funktioniert aber auch nicht

edit2:
arial.ttf wird auch im Explorer vom GP2x richtig angezeigt
 
Elektranox said:
nehm mal das button game und tu da die arial datei rein... vielleicht geht die ja einfach nicht... achja im buttongame sollte unten eigentlich noch text stehen... Halt die Zeit, wie lange man noch hat!

1. Arial im Buttongame funktioniert

2. Ja das ist noch ein text unten (Punkte zählen)^^

3. Hat dein Pinguin ein Thinkpad in der Hand? :)
 
Beltar said:
Elektranox said:
nehm mal das button game und tu da die arial datei rein... vielleicht geht die ja einfach nicht... achja im buttongame sollte unten eigentlich noch text stehen... Halt die Zeit, wie lange man noch hat!

1. Arial im Buttongame funktioniert

2. Ja das ist noch ein text unten (Punkte zählen)^^

3. Hat dein Pinguin ein Thinkpad in der Hand? :)

1. gut
2. mag sein, hab ich vor ewigkeiten mal so hingecodet :p
3. ja :)

wenns mit dem code geht, extrahier dir doch einfach den kram da raus :) Nimm dir einfach den code vom Buttongame und verkleiner ihn bis du nur noch die text schreiben funktion hast und implementier diese dann bei dir ;)
 
Elektranox said:
wenns mit dem code geht, extrahier dir doch einfach den kram da raus :) Nimm dir einfach den code vom Buttongame und verkleiner ihn bis du nur noch die text schreiben funktion hast und implementier diese dann bei dir ;)

Das hab ich schon gestern probiert. Wenn ich nichts vergessen habe funktioniert der auch nicht

edit:
Sind die SDL dateien extra für den GP2x verändert?

Edit2:

Eventuelle Lösung: Hab im Buttongame einen Funktionsaufruf: TTF_Init(); gefunden. Weiß zwar noch nicht was der macht aber auf dem PC hab ich schon eine Schrift ausgeben können

Ob es am GP2x funktioniert kann ich heute erst am 18:00 testen da ich ihn nicht mit habe.
Schreibe euch morgen ob es funkt

mfg
Beltar

edit last: Hab ein bisschen länger gebraucht mit dem Testen aber es war die Funktion TTF_Init();
 
Back
Top