出于某种原因,我无法得到pyglet来绘制精灵。这是我的代码:
import pyglet
game = pyglet.window.Window(640, 480, "I'm a window")
batch = pyglet.graphics.Batch()
pyglet.resource.path = ["."]
pyglet.resource.reindex()
image = pyglet.resource.image("hextile.png")
pyglet.sprite.Sprite(image, x=200, y=300, batch=batch)
pyglet.text.Label('DING', font_name='Arial', font_size=24, x=100, y=100, batch=batch)
@game.event
def on_draw():
game.clear()
batch.draw()
#image.blit(0, 0)
pyglet.app.run()
现在,当我绘制批处理时,文本标签会正确显示。我在窗户上看到“DING”。但是,未显示图像“hextile.png”。我尝试独立绘制精灵,但这也不起作用。然而,模糊图像(如注释行中所示)似乎工作得很好,但显然这不是我在此之后的功能。我无法想出这个。我错过了什么?
答案 0 :(得分:5)
假设您和您的朋友拥有ATI显卡:
Sprite.draw()在内部使用v2i
格式和VertexDomain.draw()。由于某种原因,此组合不适用于Windows Vista / 7 Catalyst驱动程序11.9及更高版本,因此Sprite绘图也会失败。另见:pyglet vertex list not rendered (AMD driver?)
您可能需要遵循一个pyglet问题:http://code.google.com/p/pyglet/issues/detail?id=544
您当前的选择似乎是在the third comment上针对该问题修补pyglet.sprite.Sprite或降级您的视频驱动程序。
更新:无需修补Sprite或降级视频驱动程序。 Catalyst 12.4(视频驱动程序8.961.0.0)似乎解决了这个问题。
答案 1 :(得分:1)
精灵正在收集垃圾,因为你没有对它进行引用。这样做:
sprite = pyglet.sprite.Sprite(image, x=200, y=300, batch=batch)
对于它的价值,我更喜欢使用Window的子类,如下所示:(此代码也适用于我)
import pyglet
class Window(pyglet.window.Window):
def __init__(self, *args, **kwargs):
super(Window, self).__init__(*args, **kwargs)
self.batch = pyglet.graphics.Batch()
image = pyglet.resource.image('hextile.png')
self.sprite = pyglet.sprite.Sprite(image, batch=self.batch)
def on_draw(self):
self.clear()
self.batch.draw()
def main():
window = Window(width=640, height=480, caption='Pyglet')
pyglet.app.run()
if __name__ == '__main__':
main()