如何使用函数在 pyglet 中画线?
How do I use a function to draw a line in pyglet?
我是pyglet的新手,python总的来说,我想创建一个画线的函数。
这是我的代码:
import pyglet
from pyglet import shapes
title = "Tic Tac Toe"
window = pyglet.window.Window(600, 600, title)
batch = pyglet.graphics.Batch()
def drawBoard(batch=None):
line = shapes.Line(600, 0, 300, 600, width=2, color=(0, 230, 0), batch=batch)
line.opacity = 250
drawBoard(batch=batch)
@window.event
def on_draw():
window.clear()
batch.draw()
pyglet.app.run()
当我将函数内的代码移出函数时,它会根据需要创建行,但是当我将它放入函数中时,代码只会创建一个空白背景。
形状 line
是 drawBoard
函数中的局部变量。 batch
只是存储一个指向形状的弱指针。因此,当函数终止时,line
被销毁。
一个选项是存储行 global
命名空间:
def drawBoard(batch=None):
global line
line = shapes.Line(600, 0, 300, 600, width=2, color=(0, 230, 0), batch=batch)
line.opacity = 250
如果你想画更多的图形,我建议在列表中管理图形:
import pyglet
from pyglet import shapes
title = "Tic Tac Toe"
window = pyglet.window.Window(600, 600, title)
batch = pyglet.graphics.Batch()
def drawBoard(shape_list, batch=None):
for i in range(100, 600, 100):
linex = shapes.Line(i, 0, i, 600, width=2, color=(0, 230, 0), batch=batch)
linex.opacity = 250
shape_list.append(linex)
liney = shapes.Line(0, i, 600, i, width=2, color=(0, 230, 0), batch=batch)
liney.opacity = 250
shape_list.append(liney)
shape_list = []
drawBoard(shape_list, batch=batch)
@window.event
def on_draw():
window.clear()
batch.draw()
pyglet.app.run()
我是pyglet的新手,python总的来说,我想创建一个画线的函数。 这是我的代码:
import pyglet
from pyglet import shapes
title = "Tic Tac Toe"
window = pyglet.window.Window(600, 600, title)
batch = pyglet.graphics.Batch()
def drawBoard(batch=None):
line = shapes.Line(600, 0, 300, 600, width=2, color=(0, 230, 0), batch=batch)
line.opacity = 250
drawBoard(batch=batch)
@window.event
def on_draw():
window.clear()
batch.draw()
pyglet.app.run()
当我将函数内的代码移出函数时,它会根据需要创建行,但是当我将它放入函数中时,代码只会创建一个空白背景。
形状 line
是 drawBoard
函数中的局部变量。 batch
只是存储一个指向形状的弱指针。因此,当函数终止时,line
被销毁。
一个选项是存储行 global
命名空间:
def drawBoard(batch=None):
global line
line = shapes.Line(600, 0, 300, 600, width=2, color=(0, 230, 0), batch=batch)
line.opacity = 250
如果你想画更多的图形,我建议在列表中管理图形:
import pyglet
from pyglet import shapes
title = "Tic Tac Toe"
window = pyglet.window.Window(600, 600, title)
batch = pyglet.graphics.Batch()
def drawBoard(shape_list, batch=None):
for i in range(100, 600, 100):
linex = shapes.Line(i, 0, i, 600, width=2, color=(0, 230, 0), batch=batch)
linex.opacity = 250
shape_list.append(linex)
liney = shapes.Line(0, i, 600, i, width=2, color=(0, 230, 0), batch=batch)
liney.opacity = 250
shape_list.append(liney)
shape_list = []
drawBoard(shape_list, batch=batch)
@window.event
def on_draw():
window.clear()
batch.draw()
pyglet.app.run()