11

我正在试验 cocosmotion,一个 Cocos2d 的 Rubymotion 实现。在我正在学习的教程中,我有一个将结构作为参数的方法。我查阅了 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库中的重命名为类似的名称CCTexParams?我猜这不是一个理想的解决方法。

4

2 回答 2

2

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

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

于 2013-07-06T21:11:39.573 回答
0

您将需要为您的框架生成的 bridgesupport 文件。请参见:

https://github.com/MacRuby/MacRuby/wiki/MacRuby-Tutorial

并查看“访问静态 API”部分。那应该为您指明正确的方向。

于 2013-03-03T05:14:06.657 回答