4

どういうわけか、ピグレットにスプライトを描画させることができません。これが私のコードです:

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」は表示されていません。スプライトを個別に描画してみましたが、それもうまくいきませんでした。ただし、画像のブリット化(コメント行に示されている)は問題なく機能しているように見えますが、これは明らかに、私がここで求めている機能ではありません。私はこれを理解することはできません。私は何が欠けていますか?

4

2 に答える 2

5

あなたとあなたの友人がATIグラフィックカードを持っていると仮定します:

Sprite.draw()は、v2iフォーマットとVertexDomain.draw()を内部的に使用します。何らかの理由で、この組み合わせはWindows Vista / 7 Catalystドライバー11.9以降では機能しないため、スプライトの描画も失敗します。参照:ピグレット頂点リストがレンダリングされない(AMDドライバー?)

フォローしたいピグレットの問題があります:http ://code.google.com/p/pyglet/issues/detail?id = 544

今のところあなたの選択肢は、その問題に関する3番目のコメントで述べられているようにpyglet.sprite.Spriteにパッチを当てるか、ビデオドライバーをダウングレードすることのようです。

更新: Spriteにパッチを適用したり、ビデオドライバーをダウングレードしたりする必要はありません。この問題は、Catalyst 12.4(ビデオドライバー8.961.0.0)で修正されたようです。

于 2012-03-21T15:47:26.363 に答える
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()
于 2012-03-14T00:04:04.397 に答える