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

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

时间:2022-12-19 22:34:37浏览次数:32  
标签:bgTile1 bgTile2 滚屏 游戏 self iOS tempSprite position CCSprite





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

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

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

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

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

                                               

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



​​view plain​​



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



此时运行的截图如下:

               

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



​​view plain​​



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



运行截图如下:


              

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

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



​​view plain​​



  1. [CCSprite.texture setAliasTexParameters];  



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




​​view plain​​



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



再次运行效果图如下:

               

  OK,完美解决;


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

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

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




​​view plain​​



  1. [[UIApplication sharedApplication] setIdleTimerDisabled:YES];  



     OK,本章介绍的知识点虽然很少解决的方法也很简单,但是也是游戏中最容易遇到的两个问题;


     那么这里肯定会有不少童鞋认为本身一句代码的事情非写这么多进行说明,嗯 ,确实写的过于详细,但是Himi之所以写这么详细主要还是想让还没有遇到此类问题的童鞋清晰化此类问题出现的原因,这样能让更多童鞋减少以后遇到此问题的疑问~






标签:bgTile1,bgTile2,滚屏,游戏,self,iOS,tempSprite,position,CCSprite
From: https://blog.51cto.com/u_11295556/5953925

相关文章

  • SQL递归游戏-你厉害吗,来过5关
    5个flash的游戏地址是​​​http://www.sostart.com/article/view.php/765​​​此类游戏一般都是通过穷举或者递归之类的方法来求解,对于编成语言来说都比较简单。这里......
  • Delphi 经典游戏程序设计40例 的学习 例39 点阵图编辑器的世界
    unitR39;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,StdCtrls,Menus;typeTRei39......
  • 剪刀石头布小游戏
    这是源码import java.util.Scanner;//1public class sdd{    public static void main(String[] args) {        // TODO Auto-generated method......
  • 游戏引擎中的实时渲染和在V-Ray中渲染有什么区别 2022-11-25
    游戏引擎中的实时渲染和在V-Ray中渲染有什么区别,下面我们一起来分析一下,从2个方面来具体分析实时渲染和在V-Ray中渲染种的不一样的区别。原理区别VRay等渲染器原理上叫......
  • 【iOS知识汇】-一行中文字半个问题处理
    使NSLineBreakByCharWrapping会出现半个字处理办法 1.NSLineBreakByCharWrapping换行2.设置单行高度。必须。3.行数不设置为1,应该设置为2,让自然换行,第二行换行显示,但......
  • GEE引擎架设好之后进游戏时白屏的解决方法——gee引擎白屏修复​
    ​这两天测试GeeM2引擎的服务端,最常见的问题就是点击开始游戏出现白屏,最早还以为是服务端问题,结果是因为升级了引擎,而没有升级NewUI这份文件导致的。解决方法如下:​1、下载G......
  • Nagios安装
    实验环境   操作系统:RedHatEnterpriseLinuxServerrelease6.0(Santiago)  64bit。   注意,Nagios只能安装在Linux或Unix平台,不支持Windows平台,当然,它可以......
  • 『牛角书』鸿蒙大作业---游戏
    ​​春节不停更,此文正在参加「星光计划-春节更帖活动」​​前言相信大家都玩过24点纸牌游戏,今天给大家带来的就是这个经典的纸牌游戏,大家学会以后在空闲时可以玩一玩,锻炼一......
  • 游戏服务器的配置如何选择
    1.服务器的CPU大型的游戏要接受大量的访问请求,CPU的快速吞吐量、稳定性、长时间运行都有着严格的要求,因而服务器CPU是衡量服务器性能的首要指标。之前提到根据游戏的类......
  • 鸿蒙大作业——基于鸿蒙的游戏
    前言当今国际社会普遍倡导低碳环保的理念,垃圾分类绿色环保的意识也逐渐深入人心。今天就教大家写一个简单的垃圾分类小游戏,寓教于乐,空闲时玩一玩,娱乐放松的同时学习垃圾分类......