2017-05-21 16 views
0

私は数百の四角を描くためにPygletバッチを使用しています。私は、ゲームが走っている間、頂点の位置とクワッドの色の値を更新したいと思います。これどうやってするの?私はPygletドキュメントの多くに目を通していると私は見つけることができる最も近いものは次のとおりです。Pyglet更新バッチデータ

'c4f/dynamic' 

'c4f/static' 

マイバッチの使用量は、次のようになります。

self.batch.add(4, GL_QUADS, self.texture, 
     ('v3f/dynamic', self.verticies), ('c4f/dynamic', ((1.0,1.0,1.0,1.0)*4)) 

    ... 
    def on_draw(self): 
     self.batch.draw() 
+0

戻りオブジェクトを変数に配置することによって、 'self.batach.add()'によって生成された頂点を反復処理する必要があります。 'x = self.batch.add(...)'を実行し、次に範囲内のインデックス(len(x.vertices))に対して:x.vertices [index] = New_Value'を実行します。 – Torxed

+0

素晴らしいですありがとう! – lilcutthroat

答えて

0

Pyglets batch.addあなたが操作できる頂点オブジェクトを返します。
は、以下のようなルックスに、あなたのコードを切り替え :

v = self.batch.add(4, GL_QUADS, self.texture, ('v3f/dynamic', self.verticies), ('c4f/dynamic', ((1.0,1.0,1.0,1.0)*4)) 

... 
def on_draw(self): 
    for index in range(len(v.vertices)): 
     v.vertices[index] = v.vertices[index] +1 
    self.batch.draw() 

これは、それを操作する方法の粗製の一例であり、最終的にあなたのrange()コールと更新のx、yのペアでのステップにしたいです。

+0

バッチからクワッドを削除する方法はありますか? – lilcutthroat

+0

@lilcutthroat 'v.delete()' IIRCを実行できるはずです。それ以外の場合は、バッチを再作成する必要があります。しかし、[文書](https://pythonhosted.org/pyglet/api/pyglet.graphics.Batch-class.html)によると、 'VertexList.deleteを呼び出すと、バッチから頂点リストを削除することができます.'行く。 (私は通常、私が 'batch.add'をやった直後に、すべての頂点を辞書に入れておきます。戻り値を' self.objects [ID] = batch.add(...) 'とするために追加します「状態」を維持して後のオブジェクトを操作してください – Torxed

+0

もう一度ありがとうございます – lilcutthroat

関連する問題