11

Cocos2d の Rubymotion 実装である cocosmotion を試しています。私が取り組んでいるチュートリアルには、構造体を引数として取るメソッドがあります。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ますか?それは理想的な回避策ではないと思います。

4

2 に答える 2

0

フレームワーク用に生成された bridgesupport ファイルが必要になります。参照してください:

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

「静的 API へのアクセス」セクションを参照してください。それはあなたを正しい方向に向けるはずです。

于 2013-03-03T05:14:06.657 に答える