pygame und Fonts

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
10111
User
Beiträge: 22
Registriert: Samstag 21. Februar 2009, 01:34

Hallo,

ich will in einem Programm einen Font (z.B. DejaVu Sans) verwenden. "pygame.font.get_fonts()" liefert mir aber immer ein "None". Wie binde ich den nun einen Font richtig ein, damit ich den mit

Code: Alles auswählen

font = pygame.font.Font("EinFont", 32)
auch benutzen kann? Ich hoffe, ihr könnt mir da einen Tipp geben.

Gruß
10111
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich kenne nicht pygame, lese aber in der Dokumentation, dass der Font()-Konstruktor einen Dateinamen haben will. Ich bin mir ziemlich sicher, dass "EinFont" kein Dateiname ist. Hast du es mit einem korrekten Dateinamen inklusive Pfad versucht?

Hast du zu get_fonts() mal die Kommentare unter der Dokumentation gelesen? Da steht, dass das None ein Fehler ist und du pygame 1.8 brauchst. Du schreibst ja nicht, welche Version du jetzt hast und welches Betriebssystem du benutzt.

Stefan
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

servus korrekt wirst du mit dem erfolg haben

Code: Alles auswählen

def load_font(file, size):
    'Load\'s awesome fonts!'
    file = os.path.join('data', 'fonts', file)
    try:
        font = pygame.font.Font(file, size)
    except pygame.error:
        print 'There\'s  either an error in the program or a font\'s missing'
    return font
bewegter text mit font übergabe im game zb

Code: Alles auswählen

class Text(pygame.sprite.Sprite):
    # red ,green ,blue, yello,cyan,pink,grau,weis
    col=[(255,0,0),(0,255,0),(0,0,255),(255,255,0),(0,255,255),(255,0,255),(128,128,128),(255,255,255)]
    def __init__(self,font,text, pos, speed, life,color):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.color = self.col[color]
        self.font = font
        self.font.set_bold(True)
        self.image = self.font.render(text, True,self.color)
        self.rect = self.image.get_rect(center = pos)
        self.pos = pos
        self.speed = speed
        self.life = life

    def update(self):
        self.rect.move_ip(0,self.speed)
        self.life -= 1
        if self.life <= 0:
            self.kill()
aufruf inerhalb der main initialisierung

Code: Alles auswählen

    font = load_font('kimberley.ttf', 25)
    font2 = load_font('Quadrit.ttf', 8)
    font3 = load_font('kimberley.ttf', 80)
im laufenden game als score auf shooting object

Code: Alles auswählen

            if ufo.attacking:
                SCORE += 125
                Text(font,'125',ufo.rect.center,0,30,3)
            else:
                SCORE += 75
                Text(font,'75',ufo.rect.center,0,20,7)
oder einfach nur als fix text auf screen

Code: Alles auswählen

                Text(font2,'SAVE', (15,390), 1, 80,0)
                Text(font2,'ZONE', (620,470), -1, 80,0)
10111
User
Beiträge: 22
Registriert: Samstag 21. Februar 2009, 01:34

Danke für eure Tipps.

Habe übrigens openSuse 11.1, Python 2.6, Pygame 1.8.1. (Hätte ich ja auch gleich schreiben können. *schäm*)

@sma: Das "EinFont" kein korrekter Dateiname ist, ist mir klar. Sollte ja auch nur als Beispiel dienen. Wenn ich einfach 'None' einsetze, dann nimmt er schon den Standard-Font. Soweit bin ich.

@sea-live: Also wenn ich deine Funktion richtig interpretiere, dann brauche ich für den Dateinamen auch den Pfad, wo der Font zu finden ist. Also wenn ich die Systemschriften verwenden will, muss ich dann erst mal rausfinden wo die liegen? Ist das richtig?
lunar

Alternativ kannst du die Schriftarten natürlich auch mitliefern, sofern das den Lizenzen der Schriften nicht widerspricht.
10111
User
Beiträge: 22
Registriert: Samstag 21. Februar 2009, 01:34

@lunar: Danke für deinen Hinweis mit den Lizenzen.

Hab es jetzt geschafft mit den Fonts:

Code: Alles auswählen

font = pygame.font.Font("/usr/share/fonts/truetype/DejaVuSans.ttf",20)
Das funktioniert erst mal. Trotzdem werde ich, wenn das Programm soweit fertig ist, alles etwas allgemeiner formulieren, damit man das dann auch z.B. unter Windows starten kann.

Danke für eure Hilfe! Für mich ist das Thema gelöst.
Antworten