无限滚屏效果,高级视差滚屏

CCParallaxNode不适用于生成无限滚屏效果。

使用CCSpriteBatchNode来提高背景图片的渲染速度。

单独的层文件:
滚屏效果中的所有单独的条纹文件都是480x320像素的,乍看起来很浪费,但是并不是要把这些单独的文件加载到游戏中去,而是要把它们放到纹理贴图集中去。Zwoptex可以移除每个图片的透明部分,但Zwoptex不能清除一张图片上图像之间存在的大块空间,所以
对于上述类型的图片最好分成单独的文件,以后透明部分暴露出来给zwoptex。避免了“全景渲染造成的浪费”(overdraw),图片之间很少重叠,有效降低重复绘制的像素,提高帧率。

这些图片都是以480x320尺寸保存的,Zwoptext知道它们之间的间距。我们要做的就是把所有的图片放在Zwoptex画布中央,软件会把图片放到正确的位置上。


调用一个保存在成员变量里的节点比通过getNodeByTag方法来调用要来的快。如果在每一帧中都这样做的话,就可以省下几个CPU处理周期。但是,如果要保存几十甚至上百个这样的成员变量的话,那就不值得这样做了。

CCTexture2D* gameArtTexture = [[CCTextureCache sharedTextureCache] addImage:@"game-art.png"];
把相同一张贴图 再次添加到CCTextureCache中是唯一一个获取已被缓存的贴图的方法。第二次调用这个操作不会将贴图再次加载;CCTextureCache这个单例知道这个贴图已被加载过, 会直接调用已被缓存的版本,这个操作速度很快。为什么没有一个像getTextureByName这样的方法来调用已经被缓存的贴图,不过现在确实是没有这样的方法可用。

用一个相同数量大小的数组来存储对应每一层的移动速度因子,相似层的速度应该相同。


续屏:
方法是把每一种背景条纹图片再加一个到原先图片的右边,与原先图片的尾部相接。这就让原先的背景条纹图片的长度增加了一倍,满足了无限滚屏的要求。根据不同的背景图片,可以选择对图片平铺还是翻转。
把第二组的各个背景图片水平翻转过来:这样做可以在视觉上把左右两个背景条纹图片无缝连接起来,以避免产生任何显眼的边界。
前面一组的图片完全超出屏幕后,把它们定位到后面,来实现无限滚动效果。


重复贴图
可以在一块指定大小的正方形区域里让贴图重复出现。如果你把这块指定的正方形区域设置的够大,你可以达到让背景无限滚屏的效果。至少可以用重复的贴图覆盖几千个像素或者几十个屏幕大小的区域,而不至于影响游戏的运行效率和内存占用率。
要用到的是OpenGL支持的GL_REPEAT贴图参数。不过这个方法只适用于正方形的区域,而且要满足“2的n次方”规则,比如32x32或者128x128像素。
例:用GL_REPEAT重复背景贴图 
CGRect repeatRect = CGRectMake(-5000, -5000, 5000, 5000);
CCSprite* sprite = [CCSprite sp riteWithFile:@”square.png” rect:repeatRect];
ccTexParams params =
{
GL_LINEAR,
GL_LINEAR,
GL_REPEAT,
GL_REPEAT
};
[sprite.texture setTexParameters:&params];
重复贴图可以使一片图片由小图片平铺而成,但它不能解决无限滚屏。

猜你喜欢

转载自wwk.iteye.com/blog/1709827