Seasons.NET

ちょっとした技術ブログです

CCSprite拡張の提案その2( テクスチャフレームからスプライトを生成するときの-hdサフィックスの判別 )


先ほど本家のIssueに上げておきました。
提案とか言いつつ不具合と思っているため、Issueにアップした次第です。

#Issue 1087


パッチのコードは、Gistからどうぞ。


●内容
TexturePackerで生成したテクスチャアトラスでRetinaDisplayの画像を作る時は、
"-hd"サフィックスのついたスプライトを登録して、-hdサフィックスのついたplistとpvr.cczなどを
出力すると思います。

このとき、非Retina画像は、-hdがついてませんから以下のような構成が想定されます。

□非Retina
cards-common.plist , cards-common.pvr.ccz

  • card00.png
  • card01.png

□Retina
cards-common-hd.plist , cards-common-hd.pvr.ccz

  • card00-hd.png
  • card01-hd.png


さてここから本題ですが、plistやpvr.cczを読み込む時、-hdサフィックスを意識せず、
"-hd"を除いたファイル名で読み込む事ができます。
つまり内部でファイルを自動的に判別して読み込んでくれるのです。
仮にRetina画像がなかったとしても非Retinaの方があればそちらを読み込んでくれます。


ですが、CCSpriteのspriteWithSpriteFrameName:クラスメソッドは、
同じように CCSprite spriteWithSpriteFrameName:@"card00.png"
のようにしてスプライトを生成しようとしても、Retinaディスプレイのデバイスでは
画像が見つからず、生成することができません。
card00-hd.pngと指定する必要があるわけです。


コードをRetinaと非Retinaで分けるのと読み込むべきファイル名
生成ルーチンを作るのは面倒ですから、テクスチャアトラスを作る時に
ファイル名を同名で作る必要があります。

当然ですがRetina,非Retinaかどうかは、ファイル名では区別できません。


これでは非常に困るので、"card00.png"と引数に渡しても、
内部で-hdサフィックス画像を探してあれば読み込むようにパッチを作りました。
できれば、これは、0.99.6に採用されてもらいたいですねぇ。