Я экспериментирую с cocosmotion, реализацией Rubymotion Cocos2d. В учебнике, над которым я работаю, у меня есть метод, который принимает структуру как аргумент. Я консультировался с документами Rubymotion и MacRuby, но не могу понять, как создать экземпляр нового объекта на основе структуры, в которой я нуждаюсь. Я думаю, что основная проблема заключается в том, что структура начинается с строчной буквы, и Ruby думает, что это локальная переменная, когда я пытаюсь работать с ней.
Я считаю, что у меня такая же проблема, как и здесь: https://github.com/MacRuby/MacRuby/issues/121
Есть ли решение или обходное решение?
Структура определена в Objective-C следующим образом:
typedef struct _ccTexParams {
GLuint minFilter;
GLuint magFilter;
GLuint wrapS;
GLuint wrapT;
} ccTexParams;
Метод, который я пытаюсь вызвать, ожидает структуру ccTexParams.
Вот что я пробовал:
@mysprite = Pointer.new("{ccTexParams=
{GLUint=GL_LINEAR_MIPMAP_LINEAR}
{GLUint=GL_LINEAR}
{GLUint=GL_CLAMP_TO_EDGE}
{GLUint=GL_CLAMP_TO_EDGE}}", 4)
Когда я пробую это так:
@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
Ошибка выполнения:
expected instance of Pointer of type `{_ccTexParams=IIII}', got `@' (TypeError)
Я также пробовал:
@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
Ошибка:
Can't find pointer description for type `_ccTexParams'
Я также пытался заменить его как CcTexParams, _ccTexParams и просто ccTexParams по-разному, без каких-либо версий.
Я пробовал это:
@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 жалуется на expected an instance of Pointer, got '#<CcTexParams minFilter=9987 magFilter=9729 wrapS=33071 wrapT=33071>' (CcTexParams) (TypeError)
Я попробовал просто передать [GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE]
непосредственно методу. Он жалуется, что он expected a Pointer but got an Array
.
Возможно, мне нужно просто переименовать ccTexParams
в lib на что-то вроде ccTexParams
? Я предполагаю, что это не идеальное решение.