Comme mentionné dans les commentaires.
La plupart des exemples trouvés sur Internet (même la plupart des guides) supposent une plate-forme Windows.
S'il existe une déclaration font=
avec une police Windows mais que vous exécutez Linux, assurez-vous que les polices appropriées sont installées ou revenez à une police installée.
$ fc-list
également ne pas déclarer une police travaillera aussi:
label = pyglet.text.Label("Hello World!",
color=(255,255,255,255),
font_size=36,
x=window.width//2, y=window.height//2,
anchor_x="center", anchor_y="center")
Parce que Pyglet sera par défaut sans-serif:
Si vous ne vous souciez pas particulièrement que la police est utilisée, et juste besoin d'afficher du texte lisible, vous pouvez spécifier None comme nom de famille, ce qui va charger une police sans-serif par défaut (Helvetica sur Mac OS X, Arial sur Windows XP)
Votre problème est probablement que vous ne mettez pas à jour manuellement l'écran après avoir dessiné quelque chose. Normalement, lorsque vous appuyez sur une touche, cela force window.flip()
, ce qui signifie essentiellement mettre à jour le contenu de l'écran.
window.clear()
déclenche également ce comportement, mais pas x.draw()
. Pourquoi? Eh bien la chose qui prend du temps en infographie n'est pas vraiment les calculs, c'est la mise à jour à l'écran qui prend du temps .. Là pour .draw()
ne met pas à jour l'écran, il met juste les trucs dans le buffer graphique ("page"), vous décidez quand retourner la page et afficher le nouveau tampon sur l'écran.
Essayez ceci:
@window.event
def on_draw():
window.clear()
label.draw()
window.flip()
Cela pourrait être une solution surpuissant, mais il résoudra probablement le problème.
Cela remplace la boucle par défaut de pyglet et le comportement de dessin par défaut, c'est aussi l'une des classes que j'utilise le plus dans mes projets pyglet car elle me donne l'option de créer mon propre framework.
import pyglet
class Window(pyglet.window.Window):
def __init__(self):
super(Window, self).__init__(vsync = False)
self.sprites = {}
self.sprites['testlabel'] = label = pyglet.text.Label("Hello World!",
color=(255,255,255,255),
font_size=36,
x=self.width//2, y=self.height//2, #self here, being pyglet.window.Window that we've inherited and instanciated with super().
anchor_x="center", anchor_y="center")
self.alive = 1
def on_draw(self):
self.render()
def render(self):
self.clear()
for sprite_name, sprite_obj in self.sprites.items():
sprite_obj.draw()
self.flip()
def on_close(self):
self.alive = 0
def run(self):
while self.alive:
self.render()
# This is very important, this queries (and empties)
# the pyglet event queue, if this queue isn't cleared
# pyglet will hang because it can't input more events,
# and a full buffer is a bad buffer, so we **NEED** this!
event = self.dispatch_events()
win = Window()
win.run()
Il est extrêmement basique, mais vous pouvez ajouter plus de sprites, les objets et les rendre à def render(self):
.
Êtes-vous 100% sûr que c'est le code que vous utilisez? Parce que ce code fonctionne comme prévu sur ma configuration https://youtu.be/Yc_25-CxAak - Versions Python: 3.5.1/Pyglet: 1.2.2 – Torxed
Vous avez tagué cette question avec "Ubuntu" même si vous êtes essayer de charger pyglet avec "Times New Roman", était-ce exprès? Parce que TNR n'existe pas sous Linux par défaut. – Torxed
Techniquement Kubuntu mais il s'avère que j'avais oublié d'installer les polices Microsoft. Je savais que ce serait une chose simple. – Elija