2017-05-26 47 views
1

私はpygletを使用して私のpythonゲームのメインメニューを作成しています。私はコンテナとして機能するボックスの上にテキストを描きたい。透明な背景を持つ代わりに、テキストをレンダリングするたびに、glClearColorが設定されているものを描画します。これは、バックグラウンドのない画像を描画しようとするときにも発生します。Pygletのテキストの背景が透明ではありません

私は現在、これらの2行をテキストボックスとテキストに使用しています。

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

2つのグループは順序グループ​​です。 '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設定以外の唯一のものは、両方の 'グループ'が 'なし'に設定されていることです。 – msarch

関連する問題