Cocos2d的SpriteSheet是将一些图片合在一起,放在一张大图片里。这种技术对于做动画效果是很有利的。它可以使系统不用每画一帧都要读取一张图片,只要事先定好每张小图在大图里的位置,读取的时候直接找到该位置的图片就行了。

然而,这种技术在应用到有多层图片的时候就无法胜任了。

SpriteSheet类在使用时是直接把合成的大图加入到layer里面的,但是这样就无法给大图里面的每一张小图分配不同的层级。因此如果有两张小图被合成到了同一个大图里,而又需要重叠显示在layer里时,其中一张图片就会被另一张遮住(具体哪张被盖住取决于加入到layer的顺序)。

如果想要解决这个问题,一种方法是把这两张小图片合成到两张不同的大图里去,然后在加入layer的时候或者通过调整加入的顺序,或者设置CCNode的zOrder,控制图片的叠层;另一种方法就是索性放弃SpriteSheet,直接用CCSprite分别读取两张小图,这样可以避免图片无法分层的问题;第三种方法是使用cocos2d的另一个类SpriteAtlas,SpriteAtlas同样是读取由小图片合成的大图片,但是该类不能把大图直接加入到layer里面,而仍然要读取每一个CCSprite。

以上三种方法都可以解决SpriteSheet无法分层的问题。但是总的图片数量、每一个程序的代码本身的限制以及其他各种因素都会影响到对三个方法的优劣的判断。因此必须要根据当前project的不同情况,使用最方便、代价最小的方法。

posted on 2010-11-10 15:56  eagley  阅读(1159)  评论(0编辑  收藏  举报