Resultat 1 till 7 av 7

Ämne: SystemFont - enkel utritning av text utan fontladdning

  1. #1

    C++ SystemFont - enkel utritning av text utan fontladdning

    När man gör spel, så är det ofta väldigt användbart att kunna snabbt och enkelt visa text på skärmen, t.ex. för debuggning och allmän info. För att kunna göra det krävs det ofta att man initierar nån slags font-system, och att man laddar in font-data filer etc. Men ibland är det lite opraktiskt, så för länge sen skrev jag en DebugFont klass där själva koden inkluderade font-datan, så man enkelt kan rita ut text utan externa beroenden.

    Nyligen gjorde jag en uppdaterad version, lite uppstädad och med två olika fonter - en 9x16 och en 8x8 - de klassiska DOS-fonterna. Speciellt 9x16 fonten är en favorit, då jag tycker den ger mycket god läsbarhet (har t.om. börjat använda den som min primära kod-font i Visual Studio). Fonterna ser ut så här:




    För att rita ut text, behöver man bara inkludera "SystemFont.h", och sedan anropa:

    Kod:
    SystemFont9x16(pixelDataPtr,w,h,20,30,"Test of the SystemFont 9x16");
    eller

    Kod:
    SystemFont8x8(pixelDataPtr,w,h,20,30,"Test of the SystemFont 8x8");
    Där pixelDataPtr är en pekare till pixeldatan för den bitmap som man vill rita ut texten på, och w,h är bredden och höjden på bitmappen. 20,30 är positionen som texten ska ritas ut på. Man kan även specificera en optional sista parameter som är färgen att rita med.

    Så här kan det se ut när man ritar ut texten:



    Själva font datan ligger i SystemFont.cpp, som en statisk array, med en bit per pixel - så att inkludera denna fil kommer att öka exe-filen med 7K för font datan.

    Om man vill kunna använda fonten tillsammans med t.ex. DirectX, så kan man antingen ha en texture som man kör lock-unlock på, och skickar dess pixel-pekare direkt till SystemFont-anropen, eller så kan man göra nån egen variant som bara kopierar font-datan till en textur (själv har jag ju min Pixie motor som renderar allt i software, så jag använder SystemFont för att rita direkt på dess bitmaps).

    Koden finns att ladda ner här, och är som vanligt public domain, så använd fritt:

    http://www.colossusentertainment.com...emFont_1_0.zip

  2. #2

  3. #3
    vad får du för fel?

  4. #4
    Den vet inte vad pixelDataPtr,w,h är. Jag includa .h filen.
    Jag änvänder SDL kan det vara felet?

  5. #5
    ja, du måste byta ut pixelDataPtr till en pekare till din pixeldata (borde du kunna få från SDL_Surface), och w och h byts ut mot bredden och höjden på din SDL_Surface.

  6. #6
    så här`? SystemFont9x16(text,50,50,20,30,"Test of the SystemFont 9x16");

  7. #7
    jag vet inget om SDL, men om "text" innehåller en pekare till din pixeldata, och ytan du ritar mot är 50x50 pixlar, då stämmer det bra :-)

Taggar för det här ämnet

Bokmärken

Behörigheter för att posta

  • Du får inte posta nya ämnen
  • Du får inte posta svar
  • Du får inte posta bifogade filer
  • Du får inte redigera dina inlägg
  •