我正在创建一个带有网格的元胞自动机,但是当我试图给单元格一个颜色时,我得到了一个错误。如果我删除"('c3B', (255,0,0))"
,一切正常。在
def on_draw(self):
self.clear()
self.predatorAndPrey.draw()
功能如下:
^{pr2}$错误如下:
File "E:/Python/Cellular Automata/Predator and Prey/Cellular Automata.py", line 23, in on_draw
self.predatorAndPrey.draw()
File "E:\Python\Cellular Automata\Predator and Prey\predator_and_prey.py", line 39, in draw
('c3B', (255,0,0))
File "E:\Python\Cellular Automata\venv\lib\site-packages\pyglet\graphics\__init__.py", line 230, in draw_indexed
'Data for %s is incorrect length' % format
AssertionError: Data for c3B is incorrect length
由于我的评论显然是有道理的,下面就详细解释一下它为什么起作用,并举例说明如何正确使用它。在
函数
draw_indexed()
是一种按索引顺序绘制原语的方法。原语可以是pyglet.gl
上下文支持的任何内容,在本例中是GL_QUADS
。GL_QUAD
对象至少需要一件事,那就是所有原语四个角的cordinate。你在square_cords
中提供它们,它们成对地出现在两个(X,Y) * 4
角上(总共8个项)。在或者,您可以向
GL_QUAD
对象提供颜色信息。这将指示渲染过程每个角点应映射到的颜色。在您的例子中,您选择了发送颜色信息。在所有这些都基于两个方面:
v2i
意思是vertext
信息,2
每个顶点的组件(意思是2D空间),并且提供的数据是i
(整数)类型。在颜色遵循相似的含义/定义。其中
c3B
表示c
表示颜色,3
表示每个数据blob(在本例中为RGB)的3个项目,类型为B
(unsigned int)。但是颜色是很难理解的,因为它与v2i
中的顶点定义数量有很大关系。这意味着颜色是绑在每对(角落)在你的四方。如果它是一条线,它将被绑定到行的开始和结尾。在一个点中,它是一个单一的颜色定义,因为一个点只有一个(x,y)
元素。但是它总是与原语中期望的定义数量相关联-所以再次强调-你的四边形有4个定义/角点-所以你需要4个颜色对。在所以你需要将你的颜色定义
(255, 0, 0)
乘以你有角的次数。(255, 0, 0)
因为您使用了3B
。{/cd21>所以你有角。实现这一点的最简单方法是(255,0,0) * int(len(square_cords)/2)
。/2
是因为在square_cords
(x,y)中每个角点有2对-但是您只想计算角的数量而不是位置。我希望这有道理。在所以,作为一个实际的例子,这里有一段代码说明了这是如何联系在一起的,希望这能教会你一些关于顶点,颜色,以及
GL_***
上下文对某些事物的期望。祝你好运。在我从来没有用过Pyglet,但是你有没有试着给alpha加最后一个0:(255,0,0,0)? 看了一下文件,它看起来是需要的。在
相关问题 更多 >
编程相关推荐