私はCocos2dのRubymotion実装であるcocosmotionを試しています。私が作業しているチュートリアルでは、structとして引数を取るメソッドがあります。私はRubymotionとMacRubyのドキュメントを調べましたが、必要な構造体に基づいて新しいオブジェクトをインスタンス化する方法を理解することはできません。主な問題は構造体が小文字で始まり、Rubyはローカル変数であると考えていると思います。Rubymotionと構造体へのポインタ
私はここに述べたように、私は同じ問題を抱えていると信じて: 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は、私はちょうど方法に直接[GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE]
を渡してみましたexpected an instance of Pointer, got '#<CcTexParams minFilter=9987 magFilter=9729 wrapS=33071 wrapT=33071>' (CcTexParams) (TypeError)
それを文句を言います。それはそれがexpected a Pointer but got an Array
と文句を言う。
恐らくlibのccTexParams
という名前をCCTexParams
のように改名する必要がありますか?私はそれが理想的な回避策ではないと推測しています。
私はあなたの質問に私の提案の内容を移動し、私の答えを削除しました。うまくいけば、それは答えがないのであなたの質問をより目立たせるでしょう。 – vacawama
@vacawamaさん、お世話になりました。 – plasticbugs