Eksperymentuję z cocosmotion, implementacją Rubosotion w Cocos2d. W samouczku, nad którym pracuję, mam metodę, która przyjmuje struct jako argument. Konsultowałem się z dokumentami Rubymotion i MacRuby, ale nie mogę wymyślić, jak utworzyć nowy obiekt w oparciu o potrzebną strukturę. Myślę, że głównym problemem jest to, że struktura zaczyna się od małej litery, a Ruby uważa, że jest to zmienna lokalna, gdy próbuję z nią pracować.Rubymotion i wskaźniki do struktur
uważam, że mam ten sam problem jak podano tutaj: https://github.com/MacRuby/MacRuby/issues/121
Czy istnieje rozwiązanie lub obejście?
Struct jest zdefiniowana w Objective-C tak:
typedef struct _ccTexParams {
GLuint minFilter;
GLuint magFilter;
GLuint wrapS;
GLuint wrapT;
} ccTexParams;
Sposób Próbuję zadzwonić spodziewa struct ccTexParams.
Oto co próbowałem:
@mysprite = Pointer.new("{ccTexParams=
{GLUint=GL_LINEAR_MIPMAP_LINEAR}
{GLUint=GL_LINEAR}
{GLUint=GL_CLAMP_TO_EDGE}
{GLUint=GL_CLAMP_TO_EDGE}}", 4)
Kiedy próbuję to w ten sposób:
@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
Runtime error jest:
expected instance of Pointer of type `{_ccTexParams=IIII}', got `@' (TypeError)
Próbowałem również:
@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
Błąd:
Can't find pointer description for type `_ccTexParams'
Ja również próbował zastąpić go jako CcTexParams, _ccTexParams i zaledwie ccTexParams na kilka różnych sposobów, nie ma wersje działać.
Próbowałem to:
@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 zarzuca mu expected an instance of Pointer, got '#<CcTexParams minFilter=9987 magFilter=9729 wrapS=33071 wrapT=33071>' (CcTexParams) (TypeError)
Próbowałem tylko przejazdem [GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE]
bezpośrednio do metody. Narzeka, że to expected a Pointer but got an Array
.
Być może powinienem zmienić nazwę ccTexParams
w bibliotece na coś podobnego do CCTexParams
? Zgaduję, że to nie jest idealne rozwiązanie.
Przeniosłem treść moich sugestii na twoje pytanie i usunąłem odpowiedź. Mam nadzieję, że sprawi to, że twoje pytanie będzie bardziej widoczne, ponieważ nie ma odpowiedzi. – vacawama
Dzięki za pomoc, @vacawama. – plasticbugs