Sto sperimentando con cocosmotion, un'implementazione di Cocym2d di Rubymotion. Nel tutorial su cui sto lavorando, ho un metodo che prende una struct come argomento. Ho consultato i documenti Rubymotion e MacRuby, ma non riesco a capire come istanziare un nuovo oggetto basato sulla struttura di cui ho bisogno. Penso che il problema principale sia che la struttura inizia con una lettera minuscola e Ruby pensa che sia una variabile locale quando provo a lavorarci.Rubymotion e Pointers to Structs
credo di avere lo stesso problema, come indicato qui: https://github.com/MacRuby/MacRuby/issues/121
C'è una soluzione o una soluzione alternativa?
La struct è definita in Objective-C in questo modo:
typedef struct _ccTexParams {
GLuint minFilter;
GLuint magFilter;
GLuint wrapS;
GLuint wrapT;
} ccTexParams;
Il metodo che sto cercando di chiamare aspetta una struct ccTexParams.
Ecco che cosa ho provato:
@mysprite = Pointer.new("{ccTexParams=
{GLUint=GL_LINEAR_MIPMAP_LINEAR}
{GLUint=GL_LINEAR}
{GLUint=GL_CLAMP_TO_EDGE}
{GLUint=GL_CLAMP_TO_EDGE}}", 4)
Quando provo in questo modo:
@mysprite = Pointer.new(:object, 4)
@mysprite[0] = GL_LINEAR_MIPMAP_LINEAR
@mysprite[1] = GL_LINEAR
@mysprite[2] = GL_CLAMP_TO_EDGE
@mysprite[3] = GL_CLAMP_TO_EDGE
L'errore di runtime è:
expected instance of Pointer of type `{_ccTexParams=IIII}', got `@' (TypeError)
Ho anche provato:
@mysprite = Pointer.new("_ccTexParams", 4)
@mysprite[0] = GL_LINEAR_MIPMAP_LINEAR
@mysprite[1] = GL_LINEAR
@mysprite[2] = GL_CLAMP_TO_EDGE
@mysprite[3] = GL_CLAMP_TO_EDGE
L'errore:
Can't find pointer description for type `_ccTexParams'
Ho anche provato a sostituirlo come CcTexParams, _ccTexParams, e solo ccTexParams in un sacco di modi diversi, non versioni di esso funzionano.
Ho provato questo:
@mysprite = CcTexParams.new
@mysprite.minFilter = GL_LINEAR_MIPMAP_LINEAR
@mysprite.magFilter = GL_LINEAR
@mysprite.wrapS = GL_CLAMP_TO_EDGE
@mysprite.wrapT = GL_CLAMP_TO_EDGE
RubyMotion lamenta che expected an instance of Pointer, got '#<CcTexParams minFilter=9987 magFilter=9729 wrapS=33071 wrapT=33071>' (CcTexParams) (TypeError)
Ho provato solo di passaggio [GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE]
direttamente al metodo. Si lamenta che è expected a Pointer but got an Array
.
Forse dovrei semplicemente rinominare ccTexParams
nella lib in qualcosa come CCTexParams
? Immagino che non sia una soluzione ideale.
Ho spostato il contenuto dei miei suggerimenti nella domanda e ho cancellato la mia risposta. Spero che questo renderà la tua domanda più visibile dal momento che non ha risposte. – vacawama
Grazie per il tuo aiuto, @vacawama. – plasticbugs