2017-05-26 137 views
1

我使用Pyglet为我的python游戏创建主菜单。我想在一个可以充当它的容器的盒子上绘制文本。每当我渲染文本,而不是透明的背景,它将绘制glClearColor设置的任何内容。每当我尝试绘制没有背景的图像时,也会发生这种情况。Pyglet文本背景不透明

我目前对我的文本框和文本使用这两行。

self.text_box = pyglet.sprite.Sprite(pyglet.image.load('../Resources/Textures/Menu/text_box.png'),640-150,360-25, batch=self.menuBatch,group=boxGroup) 

self.play_text = pyglet.text.Label("Play", font_name="Arial", font_size=32, x=640, y=360, anchor_x='center', anchor_y='center', color=(255,255,255,255), batch=self.menuBatch,group=textGroup) 

然后我只是调用self.menuBatch.draw()。我有问题的画面是:

enter image description here

+0

什么'textGroup'和'boxGroup'?他们的属性是什么?另外'text_box.png'看着方格的背景吗? – Torxed

+0

这两组只是命令组。 'boxGroup = pyglet.graphics.OrderedGroup(1)textGroup = pyglet.graphics.OrderedGroup(0)'。 'text_box.png'只是一个灰色的矩形,填充其高度和宽度。 – lilcutthroat

+0

哦,所以灰色背景应该在那里,但黑色不是? – Torxed

回答

0

对于透明效果的工作,“混合”应在OpenGL中启用。

要启用混合:

glEnable(GL_BLEND)         # transparency 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) # transparency 

这个完整片段为我工作:

import pyglet 
from pyglet.gl import * 


# Pyglet Window stuff --------------------------------------------------------- 
batch = pyglet.graphics.Batch() # holds all graphics 
config = Config(sample_buffers=1, samples=4,depth_size=16, double_buffer=True, mouse_visible=False) 
window = pyglet.window.Window(fullscreen=False, config=config) 

glClearColor( 0, 100, 0, 255) # background color 
glEnable(GL_LINE_SMOOTH) 
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE) 
glEnable(GL_BLEND)         # transparency 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) # transparency 

play_text = pyglet.text.Label("Play", font_name="Arial", font_size=32, x=240, y=140, anchor_x='center', anchor_y='center', color=(255,0,255,255), batch=batch,group=None) 
text_box = pyglet.sprite.Sprite(pyglet.image.load('text_box.png'),240-150,160-25, batch=batch,group=None) 

@window.event 
def draw(dt): 
    window.clear() 
    batch.draw() 


if __name__ == "__main__": 
    pyglet.clock.schedule_interval(draw, 1.0/60) 
    pyglet.app.run() 

screen

+0

这似乎并没有为我工作。我用文字和透明图片尝试了这一点,但都没有做任何事情。 – lilcutthroat

+0

修改答案以添加适用于我的完整代码。除了我从代码改变的openGL设置以外,唯一的另一件事是'组'被设置为'None'。 – msarch