我正在尝试cocosmotion,这是Cocos2d的Rubymotion实现.在我正在完成的教程中,我有一个以struct作为参数的方法.我咨询了Rubymotion和MacRuby文档,但无法弄清楚如何根据我需要的结构实例化一个新对象.我认为主要的问题是结构以小写字母开头,Ruby在我尝试使用它时认为它是一个局部变量.
我相信我遇到了同样的问题:https: //github.com/MacRuby/MacRuby/issues/121
有解决方案或解决方法吗?
结构在Objective-C中定义,如下所示:
typedef struct _ccTexParams {
GLuint minFilter;
GLuint magFilter;
GLuint wrapS;
GLuint wrapT;
} ccTexParams;
Run Code Online (Sandbox Code Playgroud)
我试图调用的方法需要一个ccTexParams结构.
这是我尝试过的:
@mysprite = Pointer.new("{ccTexParams=
{GLUint=GL_LINEAR_MIPMAP_LINEAR}
{GLUint=GL_LINEAR}
{GLUint=GL_CLAMP_TO_EDGE}
{GLUint=GL_CLAMP_TO_EDGE}}", 4)
Run Code Online (Sandbox Code Playgroud)
当我这样尝试时:
@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
Run Code Online (Sandbox Code Playgroud)
运行时错误是:
expected instance of Pointer of type `{_ccTexParams=IIII}', got `@' (TypeError)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
@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
Run Code Online (Sandbox Code Playgroud)
错误:
Can't find pointer …Run Code Online (Sandbox Code Playgroud)