2017-05-26 139 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