Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 551|回复: 0

【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-6 19:47:09 | 显示全部楼层 |阅读模式

    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();

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-11 12:42 , Processed in 0.059246 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表