Не могу нарисовать () спрайты в пиглете - PullRequest
4 голосов
/ 14 марта 2012

Почему-то я не могу заставить Пиглета рисовать спрайты.Вот мой код:

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()

Теперь, когда я рисую пакет, текстовая метка отображается правильно.Я вижу «ДИНГ» на окне.Однако изображение "hextile.png" не отображается.Я попытался нарисовать спрайт самостоятельно, но это тоже не сработало.Блиндинг изображения (как показано в строке с комментариями), однако, кажется, работает просто отлично, но, очевидно, это не совсем та функциональность, которая мне нужна.Я не могу понять это.Чего мне не хватает?

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

При условии, что у вас и ваших друзей есть видеокарты ATI:

Sprite.draw () использует формат v2i и VertexDomain.draw () для внутреннего использования.По какой-то причине эта комбинация не работает на драйверах Windows Vista / 7 Catalyst 11.9 и выше, и, следовательно, рисование Sprite также не удается.См. Также: список вершин pyglet не отображается (драйвер AMD?)

Существует проблема с pyglet, которой вы, возможно, захотите следовать: http://code.google.com/p/pyglet/issues/detail?id=544

Ваши варианты на данный моментПохоже, либо для исправления pyglet.sprite.Sprite, как упомянуто в третий комментарий по этому вопросу, либо понизить версию вашего видео драйвера.

Обновление: Нет необходимости исправлятьСпрайт или понизить ваш видео драйвер.Эта проблема, кажется, исправлена ​​в Catalyst 12.4 (видеодрайвер 8.961.0.0).

1 голос
/ 14 марта 2012

Спрайт получает мусор, потому что у вас нет ссылки на него. Сделайте это:

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()
...