Rubymotion和指针结构

pla*_*ugs 11 ruby ios rubymotion

我正在尝试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 description for type `_ccTexParams'
Run Code Online (Sandbox Code Playgroud)

我也尝试用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
Run Code Online (Sandbox Code Playgroud)

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?我猜这不是一个理想的解决方法.

Jam*_*ren 2

如果有人正在寻找解决方案,请尝试Joybox。它是 Cocos2D 的包装。

Joybox 结合了最流行和广泛使用的 iOS 2D 游戏引擎 Cocos2D,折叠了令人惊叹的 Box2D 物理引擎,然后将它们包装到一个干净的 Ruby API 中,这将使游戏开发对于初学者和专家来说更快、更愉快。