読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

cocos2d-x2.0-xでRetina Display対応

cocos2d-xではサフィックス(Suffix)によるリソースの切り替え(@2xや-hd)を推奨していない。
cocos2d-xはクロスプラットフォーム開発環境なのでiOSだけではなくAndroidにも対応している必要がある。
Androidのリソース管理方法としてサフィックスは適していないので、cocos2d-xではcocos2dとは別のリソース管理方法を導入したらしい。
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Mechanism_of_loading_resources


というわけで、一度cocos2d-x風の管理方法を行うためにiphoneとiphone4(Retina)のディレクトリを作ってリソースを分けてビルドしてみたところエラーが出た。
(null): While reading /hoge/Project/iphone/gazou.png pngcrush caught libpng error:


エラー内容を調べてみると、どうやらファイル名が重複している様子。
xcodeでディレクトリをリソースとしてそのまま突っ込むと、ツリーにディレクトリっぽい物ができるので安心していたら、実はディレクトリではなくグループだった。
グループの中のファイルは(多分)一緒くたにリソースフォルダに入れられるため、そのせいでエラーが発生していた。
というわけで一度グループを削除し、再度ディレクトリを追加する際に「Create folder references for any added folders」にチェックしたら一発で動いた。


サンプルのHelloCppにはiphoneipad、ipadhdのリソース切り替えを行う方法があったので参考にした。