2012-10-14 24 views
11

私は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のように改名する必要がありますか?私はそれが理想的な回避策ではないと推測しています。

+0

私はあなたの質問に私の提案の内容を移動し、私の答えを削除しました。うまくいけば、それは答えがないのであなたの質問をより目立たせるでしょう。 – vacawama

+0

@vacawamaさん、お世話になりました。 – plasticbugs

答えて

2

誰かが解決策を探している場合は、Joyboxを試してください。これはCocos2Dのラッパーです。

Joybox combines the most popular and widely used 2D game engine for iOS, Cocos2D, folds in the amazing Box2D physics engine, and then wraps them up into a clean Ruby API that will make game development faster and more enjoyable for both beginners and experts alike.

0

フレームワーク用に生成されたブリッジサポートファイルが必要です。

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

をし、 "アクセス静的APIの" セクションをチェックアウト:参照してください。それは正しい方向に向けるべきです。

関連する問題