androidfloatnull游戏
项目中的地图层采用cocos2d-x中的CCTMXTiledMap,我们的整个tile层采用的是一个大整图,然后对里面的tile进行分格子,
而且这些tile只有在一个整图上才能使用ccbatchnode 。
CCTMXTiledMap默认是不抗锯齿的,就是采用的是setAliasTexParameters,这一点可以在CCTMXLayer的setupTiles方法里进行设置的
[cpp] view plaincopy
1. m_pobTextureAtlas->getTexture()->setAliasTexParameters();
使用默认的设置,会有个问题,就是当对地图进行缩放以后,再对map进行移动,这时有些map的tile块会闪动,在android的机器上特别明显,没有办法就改用了抗锯齿操作,没有修改CCTMXLayer的默认行为,是在外部修改的
[cpp] view plaincopy
1. if(map -> getChildren() != NULL && map -> getChildren() ->count() > 0)
2. {
3. CCObject* child;
4. CCARRAY_FOREACH(map -> getChildren(), child)
5. {
6. CCSpriteBatchNode* pNode = (CCSpriteBatchNode*) child;
7. if (pNode != NULL)
8. {
9. pNode->getTexture()->setAntiAliasTexParameters();
10. }
11.
12. }
13. }
抗锯齿操作默认是没有问题的,,但是由于我们的地图块周围并没有预留额外的1-2个像素,用于抗锯齿操作时的保留像素,所以地图移动过程中,在某些地图块的边界上就会看到其在整图位置上周围像素的一些痕迹,造成一条条的白线,或者黑线,网上看到了好几个方案,最后发现在ccconfig.h中修改一个变量就可以解决这个问题
[csharp] view plaincopy
1. #ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
2. #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
3. #endif
CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL默认为0,设置为1就解决了上面说的问题,该方法应该是对抗锯齿操作的范围做了一个约束,以避免周围像素的干扰。
另外有点让人很意外的是在android机器上,CCTMXTiledMap默认是不抗锯齿的,但是当我按了home键或者其他键,让程序进入后台,然后再返回前台的时候,从效果上来看,CCTMXTiledMap变成抗锯齿了,真心不知道这是怎么回事。。。
还有就是要记得设置为2d投影,
[csharp] view plaincopy
1. CCDirector *pDirector = CCDirector::sharedDirector();
2.
3. pDirector->setProjection(kCCDirectorProjection2D);