博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!...
阅读量:6172 次
发布时间:2019-06-21

本文共 3841 字,大约阅读时间需要 12 分钟。

http://blog.csdn.net/xiaominghimi/article/details/6926913

 

     本章节主要为大家介绍在游戏开发过程中经常遇到的两个问题;

     1. 解决滚屏背景或拼接地图有黑边!

      对于游戏开发中,背景(游戏地图)是必要的元素之一,那么对于大部分游戏的背景都是动态,或者不断移动的;例如RPG中的背景随着人物、主角而移动,那么一般情况下背景都是由地图编辑器(图块)拼出来的,要不就是直接一整张大图去显示,在或者就是将一张大图进行裁减成N张,然后再进行拼接完成等等;

      那么对于背景(地图)元素中存在的重复图块很少的话基本上就没有利用地图编辑器的必要了;在这里Himi不来介绍如何在cocos2d中使用地图编辑器做背景地图 ,而是介绍在cocos2d中制作滚动地图时利用拼接地图方式遇到的黑边问题;

     如下图所示,背景是由3张图片拼接而成,如下3张图:

然后Himi将此3张作为3个精灵然后顺次绘制在屏幕上代码如下: 

 

//将三张图拼成一张完整背景         CGSize screenSize =[[CCDirector sharedDirector]winSize];        CCSprite *bgTile1 =[CCSprite spriteWithFile:@"himi_01.png"];        bgTile1.position=ccp(bgTile1.contentSize.width*0.5,screenSize.height*0.5);        CCSprite *bgTile2 =[CCSprite spriteWithFile:@"himi_02.png"];        bgTile2.position=ccp(bgTile1.position.x+bgTile1.contentSize.width,bgTile1.position.y);        CCSprite *bgTile3 =[CCSprite spriteWithFile:@"himi_03.png"];        bgTile3.position=ccp(bgTile2.position.x+bgTile2.contentSize.width,bgTile2.position.y);        [self addChild:bgTile1 z:0 tag:11];        [self addChild:bgTile2 z:0 tag:22];        [self addChild:bgTile3 z:0 tag:33];

此时运行的截图如下:

从上图童鞋们就可以看到拼接有裂缝,那么接着让3个精灵从左向右不断的x轴+1进行移动,代码如下:

//----init函数中        //每0.1秒刷新函数move        [self schedule:@selector(move) interval:0.1];//move函数-(void)move{    CCSprite *tempSprite =(CCSprite*)[self getChildByTag:11];    tempSprite.position=ccpAdd(tempSprite.position, ccp(1,0));    tempSprite =(CCSprite*)[self getChildByTag:22];    tempSprite.position=ccpAdd(tempSprite.position, ccp(1,0));    tempSprite =(CCSprite*)[self getChildByTag:33];    tempSprite.position=ccpAdd(tempSprite.position, ccp(1,0));}

运行截图如下:

这时当移动到一定距离时候会发现刚才的缝隙消失了,是消失了,通过以上两张运行效果图可以说明:

     在cocos2d中如图你使用拼接背景地图的方式去做的话,每处拼接处在移动时都会时不时的出现黑边(裂缝),至于如何解决我想童鞋们第一想法就是在裁图的时候多切出一像素的方法,第一张比如原来是100,故意裁出101,第二张绘制的时候X轴前一个像素...以此类推,还有些童鞋认为是美工的原因,可能在裁图的时候有透明像素的存在造成,当然美工裁图的不仔细确实是个不可排除的原因,但是最终解决的方案应该是将精灵设置贴图无锯齿的属性,这样就可以完美解决此问题,设置精灵贴图无锯齿方法如下:

[CCSprite.texture setAliasTexParameters];

我们将这句添加上之后再次运行,代码更改如下:

//将三张图拼成一张完整背景         CGSize screenSize =[[CCDirector sharedDirector]winSize];        CCSprite *bgTile1 =[CCSprite spriteWithFile:@"himi_01.png"];        bgTile1.position=ccp(bgTile1.contentSize.width*0.5,screenSize.height*0.5);        CCSprite *bgTile2 =[CCSprite spriteWithFile:@"himi_02.png"];        bgTile2.position=ccp(bgTile1.position.x+bgTile1.contentSize.width,bgTile1.position.y);        CCSprite *bgTile3 =[CCSprite spriteWithFile:@"himi_03.png"];        bgTile3.position=ccp(bgTile2.position.x+bgTile2.contentSize.width,bgTile2.position.y);        //让3个精灵都设置贴图无锯齿        [bgTile1.texture setAliasTexParameters];        [bgTile2.texture setAliasTexParameters];        [bgTile3.texture setAliasTexParameters];        [self addChild:bgTile1 z:0 tag:11];        [self addChild:bgTile2 z:0 tag:22];        [self addChild:bgTile3 z:0 tag:33];

再次运行效果图如下:OK,完美解决;

 

2.下面介绍第二个问题:如何禁止手机自动锁屏的问题;

     对于手机自动锁屏的问题一般都是在项目尾声的时候发现由于手机自动锁屏所带来的各种问题,例如,在cocos2d中我们调用暂停游戏的函数后,如果用户无操作,手机自动锁屏后,解锁再次进入游戏就会发现游戏不处于暂停了,(如果你有暂停界面的话,你将看到你暂停界面存在,而后面的游戏照常运行- -)

    那么这里Himi给出在应用中禁止手机自动锁屏的代码,如下:

 

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

 

 

 

http://blog.csdn.net/yuanhong2910/article/details/7163539

使用cocos2d-x显示瓦片地图,发现两个瓦片衔接的地方有黑线,找了一下解决方案:

    第一种:

    修改 ccConfig.h 

    将

    #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 0 

    改为

    #define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1

 

 

    第二种:

    调用瓦片地图对应CCTexture2D的setAliasTexParameters接口。若调用之后还有黑线,则还调用 CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);

   例如我自己的代码:

   bool AppDelegate::initInstance()

  {

//     Init Code

   。。。

    CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);

    return true;

  }

 

diaoyong瓦片地图纹理setAliasTexParameters():

    CCTexture2D* texture2D = CCTextureCache::sharedTextureCache()->textureForKey("TiledResource.png");

    texture2D->setAliasTexParameters();

 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2506122.html

你可能感兴趣的文章
CSS ID选择器与CLASS选择器
查看>>
mysql 索引B-Tree类型对索引使用的生效和失效情况详解
查看>>
指针的看法
查看>>
Cocos-2d 坐标系及其坐标转换
查看>>
LAMP网站的CACHE机制概要
查看>>
[MySQL 5.6] 5.6新参数slave_rows_search_algorithms
查看>>
ESXi5.1嵌套KVM虚拟化环境支持配置
查看>>
爬虫的小技巧之–如何寻找爬虫入口
查看>>
JVM学习(二)垃圾收集器
查看>>
为hexo博客添加基于gitment评论功能
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
Flutter - Drawer 抽屉视图与自定义header
查看>>
ERP系统的优势_库存管理软件开发
查看>>
如何内行地评价公链(一)从真正的不可能三角谈起
查看>>
BigDecimal 详解
查看>>
Shell实战之函数的高级用法
查看>>
NASA制做模拟系外行星环境 发现了热木星大气不透明的原因
查看>>
Slog67_后端框架Skynet之Makefile解读
查看>>
iOS ShareSDK桥接技术
查看>>
BAT面试须知:Java开发的招聘标准
查看>>