2012-10-14 9 views
11

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.

+0

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

+0

Dzięki za pomoc, @vacawama. – plasticbugs

Odpowiedz

2

Jeśli ktoś szuka rozwiązania, spróbuj Joybox. To opakowanie dla Cocos2D.

Joybox combines the most popular and widely used 2D game engine for iOS, Cocos2D, folds in the amazing Box2D physics engine, and then wraps them up into a clean Ruby API that will make game development faster and more enjoyable for both beginners and experts alike.