我正在尝试用pyglet批量绘制基元,但我甚至无法得到一个简单的例子。
我能够单独绘制东西,但我的理解是最佳实践是将元素分批。
这是一些非常基本的代码,但它不起作用。我收到错误:AttributeError:'tuple'对象没有属性'parent'
import numpy as np
import pyglet
WIDTH = 640
HEIGHT = 480
game_window = pyglet.window.Window(width=WIDTH, height=HEIGHT)
batch = pyglet.graphics.Batch()
def update(dt):
global t
batch = pyglet.graphics.Batch()
batch.add(2, pyglet.gl.GL_LINES, ('v2f', (100,100,200,200)),
('c3B', (255,0,0) * 2))
batch.add(2, pyglet.gl.GL_LINES, ('v2f', (400,400,50,50)),
('c3B', (255,0,0) * 2))
@game_window.event
def on_draw():
game_window.clear()
batch.draw()
if __name__ == '__main__':
pyglet.clock.schedule_interval(update, 1/120)
pyglet.app.run()
我觉得我必须遗漏一些明显的东西。
pyglet.graphics.Batch.add
的第3个参数是pyglet.graphics.Group
对象。如果未将批次关联到组,则此参数可以是None
。见Batched rendering。
您还可以使用global
statement在函数batch
中更改全局变量update
的值:
def update(dt):
global batch # <---- add batch
#batch = pyglet.graphics.Batch() <---- delete
batch.add(2, pyglet.gl.GL_LINES, None, # <---- add None
('v2f', (100,100,200,200)),
('c3B', (255,0,0) * 2)
)
batch.add(2, pyglet.gl.GL_LINES, None, # <---- add None
('v2f', (400,400,50,50)),
('c3B', (255,0,0) * 2)
)