2012-03-13 7 views
4

어떤 이유인지, 스프라이트를 그릴 때 pyglet을 사용할 수 없습니다. 내 코드는 다음과 같습니다.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

ATI/AMD 그래픽 카드가 있습니까? http://stackoverflow.com/questions/9369357/pyglet-vertex-list-not-rendered-amd-driver 거기에 내 의견을 참조하십시오. – Eric

답변

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을 패치하거나 다운 그레이드 할 것 같다 당신의 비디오 드라이버.

업데이트 : 스프라이트를 패치하거나 비디오 드라이버를 다운 그레이드 할 필요가 없습니다. 이 문제는 Catalyst 12.4 (비디오 드라이버 8.961.0.0)에서 수정 된 것으로 보입니다.

1

스프라이트가 참조를 가지고 있지 않기 때문에 스프레드가 가비지 수집 중입니다. 이 작업을 수행합니다 :

는 다음과 같이, 나는 윈도우의 서브 클래스를 사용하여 선호 가치가 무엇인지에 대한
sprite = pyglet.sprite.Sprite(image, x=200, y=300, batch=batch) 

: 당신을 가정

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

나는 그것을 시도했지만 아무런 차이가 없다. – SnowFatal

+0

나는 당신의 버전과 나의 버전을 테스트했다. 내 버전이 효과가 있었다. hextile.png의 크기는 어느 정도입니까? 원점에 더 가깝게 움직여보십시오. – FogleBird

+0

여기 내 png가 있습니다 : http://i44.tinypic.com/2wodc7t.png 다른 PNG로 시도했지만 다른 결과를 얻지 못했습니다. "근원과 더 가깝다"는 것은 무엇을 의미합니까? – SnowFatal