Cocos2d-x 公式ソースコードに自分のバグフィックスが取り込まれた

先日 Cocos2d-x の一部、Cocos2d-JS のバグ(彼らは仕様と言うかもしれない)を見つけたので、修正案を GitHub 上で公式に提案(プルリクエスト)してみました。

結果、取り込んでもらえましたので、その時やったことを紹介します。

バクの内容

JS の機能の一つに、JavaScript 側から Objective-C の関数が呼び出せるというものがあります。Cocos2d-JS v3. 6.1 現在、その引数が BOOL 型だったときに値がうまくわたらないので、NSNumber型 を使わなければならないという制限がありました。

[参考]
HOW TO CALL OBJECTIVE-C FUNCTIONS USING JS ON IOS/MAC
http://cocos2d-x.org/docs/manual/framework/html5/v3/reflection-oc/en

JavaScript には int と float の区別はなく、数値は “number” 型なので、int や float はNSNumber を使わなければならないのはよいです。しかし JavaScript でも bool は “boolean” 型があるので、NSNumber を使わなければならないのは違和感がありました。

ソースコードを確認したところ、以下の部分で JavaScript から受けた引数を NSInvocation の引数に変換しているのですが、数値も bool も区別せずに処理していました。

<cocos2d-x/cocos/scripting/js-bindings/manual/platform/ios/JavaScriptObjCBridge.mm>

[gistcode data_gist_id=”d694618edd6f08a811a3″ data_gist_highlight_line=”114″ data_gist_line=”110-119″]

これを isKindOfClass を使い、bool の時だけ特別扱いします。これで BOOL 型を引数とする C++ の関数を、修正することなく呼べるようになりました。

[gistcode data_gist_id=”0b75dc16272371a4e2a5″ data_gist_highlight_line=”114-125″ data_gist_line=”110-129″]

やったこと

バグを見つけるまではよくあることですが、今回は修正案を公式に提案するところまでやってみました。会社のコードとかではよくやってましたが、天下の Cocos2d-x 公式レポジトリに修正案を出すのは緊張します。変な日本人と思われたくない。

修正のコミット

前述の修正を、自分のローカルレポジトリでコミットし、GitHub の自分のクローンしたレポジトリ(自分の場合はshinhirota/cocos2d-x)に push しておきます。

プルリクエスト

フォーク(クローン)してある自分のレポジトリで修正のコミットを済ませていれば、Web上で簡単にできます。Cocos2d-x の開発元は中国の会社なので、レポジトリの管理も中国人エンジニアが行っているようです。詳しいコミットの説明を、英語(か中国語)で添える必要があります。

ss

ss2

説明はマークダウンで記述できるので便利です。十分な説明を書かないと英語で質問メールが来て、それに返事をしたりして時間がかかるか、最悪、無視される恐れがあります。

 

自分の場合は「こんな問題があって、このように直したら動作しました」のようなことを、サンプルコードを添えて、30分くらいかけて書きました。100行の説明より1つのサンプルコードです。

Screen Shot 2015-07-02 at 11.27.30 AM

 

プルリクエストを登録すると、レポジトリの管理者に通知が行くので、運が良ければあとは何もしなくてよいです。

自分の場合は、最初 Cocos2d-x とCocos2d-JSのレポジトリが統合されていたのをしらずに Cocos2d-JS のほうにプルリクエストを登録したら「Cocos2d-xのほうに登録してくれ」と言われてしまいましたが、あとは何もせずにすみました。

Cocos2d-x の管理者が、担当者にレビューを依頼し、その担当者のオーケーが出たので管理者がメインブランチである “v3” にマージしてくれました。やった!

 

 

Fixed iOS/JS-Bind callStaticMethod() with bool arg
https://github.com/cocos2d/cocos2d-x/pull/12598

Screen Shot 2015-07-02 at 11.58.35 AM

Cocos2d-JS の次のバージョン (v3.6.2?) には取り込まれるはずなので楽しみです。

[2015年8月27日 追記] 本修正が Cocos2d-x v3.8 (JSの一部がxに統合されたため、x からのリリース) に取り込まれてリリースされました!

まとめ

Unity人気に押され気味の印象がある Cocos2d-x/JS ですが、オープンソースであると言うのは Unity にはない魅力ですね!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です