“Troppi valori di errore decompressione” quando si tenta di creare un lotto in pyglet

StackOverflow https://stackoverflow.com/questions/4494705

  •  12-10-2019
  •  | 
  •  

Domanda

Ho cercato di ottenere lotti di lavorare in pyglet, ma io sono completamente confuso dal messaggio di errore "troppi valori di disfare" proveniente dal file pyglet/graphics/__init__.py. La mia ipotesi è che che sto facendo qualcosa di sbagliato syntaxwise quando si aggiunge la geometria al batch.

Ho tagliato il mio codice per le parti essenziali che creano l'errore:

from pyglet.gl import *
from pyglet.graphics import *
import pyglet

batch = pyglet.graphics.Batch()
img = pyglet.image.load('pic.png')
texture = img.get_texture()

class TextureEnableGroup(pyglet.graphics.Group):
    def set_state(self):
        glEnable(GL_TEXTURE_2D)
    def unset_state(self):
        glDisable(GL_TEXTURE_2D)

texture_enable_group = TextureEnableGroup()

class TextureBindGroup(pyglet.graphics.Group):
    def __init__(self, texture):
        super(TextureBindGroup, self).__init__(parent=texture_enable_group)
        self.texture = texture
    def set_state(self):
        glBindTexture(GL_TEXTURE_2D, self.texture.id)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    def __eq__(self, other):
        return (self.__class__ is other.__class__ and self.texture == other.__class__)

batch.add(12, GL_TRIANGLES, TextureBindGroup(texture), (('t2f', (0, 0)), ('v3f', (64, 64, 0)), ('t2f', (1, 1)), ('v3f', (-64, -64, 205)), ('t2f', (0, 1)), ('v3f', (-64, 64, 205)), ('t2f', (1, 1)), ('v3f', (64, -64, 205)), ('t2f', (1, 0)), ('v3f', (64, 64, 0)), ('t2f', (0, 1)), ('v3f', (-64, -64, 205))))
È stato utile?

Soluzione 4

Grazie a marcog, La riga finale corretta dello script è:

batch.add(6, GL_TRIANGLES, TextureBindGroup(texture), ('v3i', (64, 64, 0, -64, -64, 205, -64, 64, 205, 64, -64, 205, 64, 64, 0, -64, -64, 205)), ('t2i', (0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1)))

vale a dire. problema risolto =)

Il problema è stato parzialmente che ho inviato tutti i dati come una singola tupla (che marcog segnalato), nonché il superamento di un valore errato della lunghezza della serie di dati geeometry; 6 vertici invece di 12.

Altri suggerimenti

Il tuo problema è in questa linea:

batch.add(12, GL_TRIANGLES, TextureBindGroup(texture), (('t2f', (0, 0)), ('v3f', (64, 64, 0)), ('t2f', (1, 1)), ('v3f', (-64, -64, 205)), ('t2f', (0, 1)), ('v3f', (-64, 64, 205)), ('t2f', (1, 1)), ('v3f', (64, -64, 205)), ('t2f', (1, 0)), ('v3f', (64, 64, 0)), ('t2f', (0, 1)), ('v3f', (-64, -64, 205))))

Credo che dovrebbe essere:

batch.add(12, GL_TRIANGLES, TextureBindGroup(texture), ('t2f', (0, 0)), ('v3f', (64, 64, 0)), ('t2f', (1, 1)), ('v3f', (-64, -64, 205)), ('t2f', (0, 1)), ('v3f', (-64, 64, 205)), ('t2f', (1, 1)), ('v3f', (64, -64, 205)), ('t2f', (1, 0)), ('v3f', (64, 64, 0)), ('t2f', (0, 1)), ('v3f', (-64, -64, 205)))

Si noti come ho cambiato l'ultimo argomento dal formato ((tuple), (tuple)) a (tuple), (tuple)). Io non sono a conoscenza pyglet, ma scoperto questo è il modo corretto di chiamare batch.add() dal documentazione . Si noti che *data rappresenta una lista variabile di parametri alla fine della funzione di chiamata, non è una tupla o una lista come si è tentato.

Prova che e fateci sapere come funziona per voi.

"Troppi valori per spacchettare" è un errore che si ottiene quando si fanno le cose come

a, b = "a b c".split(" ")

La ripartizione restituisce tre valori, ma si tenta di attaccarli in due. Credo di avere un qualche parentesi di sbagliato in quella ultima riga. Provare a utilizzare una sintassi più chiara per questo. Come è ora è abbastanza orribile e illeggibile.

Direi che la tua quarto argomento di batch.add() non segue un formato che aspetta pyglet. Potrebbe essere utile per controllare questo.

Inoltre, guardando le linee pyglet in cui l'errore si verifica potrebbe dare ulteriori informazioni. Il problema è probabile che sia un problema con gli argomenti si passa a una funzione pyglet.

PS: documentazione per add potrebbe essere di interesse.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top