`
shuai1234
  • 浏览: 978105 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/动画播放出现毛边以及禁止游戏中自动锁屏问题!【2011年12月18日补充】

 
阅读更多

 

 李华明Himi 原创,转载务必在明显处注明:
 
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/507.html

 


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

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

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

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

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

                                               

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

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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.         [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进行移动,代码如下:

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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轴前一个像素...以此类推,还有些童鞋认为是美工的原因,可能在裁图的时候有透明像素的存在造成,当然美工裁图的不仔细确实是个不可排除的原因,但是最终解决的方案应该是将精灵设置贴图无锯齿的属性,这样就可以完美解决此问题,设置精灵贴图无锯齿方法如下:

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. [CCSprite.texture setAliasTexParameters];  

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

 

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  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,完美解决;

 

 

【2013年12月13日补充】:

对于裂缝、黑边、模糊、透明等问题,这里Himi再详细描述补充下:

 

 

1. 首先如果你使用TP(Texturepacker)进行的图片打包的话:

首先确定是否打包时,帧之间保证了>=1像素距离。

然后确定是否勾选了"premultply alhpa" 这一项(应该勾选)

最后确认你项目中是否设置了如下代码:

CCTexture2D::PVRImagesHavePremultipliedAlpha(true);

如上代码设置的作用是

2. 图片缩放后模糊透明问题

首先cocos2d/cocos2dx引擎中,默认的贴图设置了抗锯齿,如下函数:

setAntiAliasTexParameters()//设置抗锯齿 (但是会模糊透明)

那么缩放后的图片由于设置了抗锯齿会造成图片边缘模糊透明,所以对此的解决方式,我们单独处理缩放的图进行设置非抗锯齿,如下函数:

setAliasTexParameters() //设置非抗锯齿 (但是不抗锯齿)

3.图片感觉模糊不清晰

首先对于此问题的原因是:引擎默认使用的是透视投影模式,此模式的效果为近大远小的效果,所以远处的则模糊不清晰

所以我们如果想让整体所有贴图清晰,那么我们可以设置引擎为正交投影模式即可,如下代码设置:

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

 

                          如果还不行,宝贝们,你们赢了!只要以上方法都尝试过100%没问题的!!!!!!


 

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

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

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

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. [[UIApplication sharedApplication] setIdleTimerDisabled:YES];  

 

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

 

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

分享到:
评论

相关推荐

    【iOS-Cocos2d游戏开发之二十二 】源码下载

    【iOS-Cocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! http://blog.csdn.net/xiaominghimi/article/details/7009503

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-扩展动作

    在iOS游戏开发中,Cocos2d-x是一个广泛使用的2D游戏引擎,其Cocos2d-iPhone版本专为Objective-C编程语言设计。本主题主要关注Cocos2d-iPhone中的“动作”(Actions)机制,这是一个强大的工具,用于创建各种动画效果...

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-瞬时动作

    在iOS游戏开发中,Cocos2d-x是一个广泛使用的2D游戏引擎,它为开发者提供了丰富的功能和便利的API来创建交互式的游戏。本篇主要关注Cocos2d-iPhone中的动作(Action)系统,特别是瞬时动作(Instant Action)。瞬时...

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-速度变化

    在iOS游戏开发中,Cocos2d是一个广泛使用的2D游戏引擎,特别是在Cocos2d-iPhone版本中,它为开发者提供了丰富的功能和强大的性能。本篇主要关注Cocos2d-iPhone中的“动作”(Action)系统,特别是速度变化...

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-延时动作

    在iOS游戏开发中,Cocos2d-x是一个广泛使用的2D游戏引擎,其在iOS上的版本称为Cocos2d-iPhone。本知识点主要探讨的是Cocos2d-iPhone中的动作(Action)系统,特别是延时动作(DelayTime)。在Cocos2d中,动作是一种...

    【iOS-Cocos2d游戏开发】Cocos2d-iPhone动作Action-组合动作

    在iOS游戏开发中,Cocos2d-x是一个广泛使用的2D游戏引擎,它为开发者提供了丰富的功能和便利的API。本篇文章将深入探讨Cocos2d-iPhone中的“动作(Actions)”和“组合动作(Composite Actions)”,帮助你更好地...

    【iOS-Cocos2d游戏开发】触屏事件处理机制

    本篇文章将详细讲解Cocos2d游戏开发中的触屏事件处理机制,帮助你理解如何利用这个框架来响应用户的触摸操作。 触屏事件处理在iOS游戏开发中至关重要,因为它直接决定了游戏的交互性和用户体验。Cocos2d中的触摸...

    iOS cocos2d游戏开发教程

    ### iOS Cocos2d游戏开发教程:从入门到精通 #### 引言 在苹果的iTunes App Store以及伴随而来的移动设备(如iPhone、iPod touch和iPad)的推动下,开发并销售自己的计算机游戏变得前所未有的容易。尽管这并不意味...

    iOS实例开发源码——iliu-ios-cocos2d-viking-cba07f8.zip

    Cocos2D是一个广泛使用的2D游戏开发框架,它提供了丰富的功能,如动画、物理引擎、精灵、场景管理等,使得开发者能够高效地创建游戏和互动应用。 iOS实例开发源码的探索通常涉及以下几个方面: 1. **Cocos2D框架**...

    ios-cocos2d-objc实现的跑酷游戏.zip

    Cocos2D-Objective-C是Cocos2D游戏引擎的一个版本,专为iOS应用设计,它允许开发者使用Objective-C语言创建2D游戏、图形界面或者其他动态视觉效果。 【描述】提到的"github地址:...

    12-IOS游戏开发Cocos2d.pdf

    在iOS开发中,Cocos2d-iPhone是一个极具价值的库,它提供了丰富的功能,如精灵管理、图形特效、动画效果、物理引擎和音频处理等,帮助开发者在构建iPhone游戏时提高效率。由于其开源性质,Cocos2d-iPhone可以免费...

    【iOS-Cocos2d游戏开发】仿愤怒的小鸟 场景缩放

    写了个场景缩放类,但地图碰到一个很奇怪的问题,可以探讨下,场景用的tileMap地图,缩放后会有一些黑线,很纠结,目前没找到解决方案,有答案的告诉我下,谢谢! 直接上图吧: 说明:缩放不会影响精灵的运动,只简单的写了...

    cocos2d-x手机游戏开发(跨android/ios/wp7/wp8/windows 8平台)

    cocos2d-x手机游戏开发(跨android/ios/wp7/wp8/windows 8平台) 游戏课程特点: ---------------------------------------------------------- 1、国内首创跨平台游戏开发 2、深度讲解Cocos2D-X并运用于实战 3、...

    【iphone游戏开发】iphone-Cocos2d游戏开发

    在本篇关于“【iPhone游戏开发】iPhone-Cocos2d游戏开发”的专题中,我们将深入探讨Cocos2d游戏引擎在iOS平台上的应用,特别是如何使用Cocos2d来实现小鸟眨眼睛的效果。Cocos2d是一款强大的2D游戏开发框架,它为...

    IOS 5 cocos2d游戏开发实战

    《iOS 5 cocos2d游戏开发实战》这本书深入探讨了在iOS 5平台上利用Cocos2d框架进行2D游戏开发的技术与实践。Cocos2d是一款强大的、开源的、跨平台的游戏开发库,尤其适合于创建具有复杂动画效果和交互性的2D游戏。 ...

    iOS游戏应用源代码——iliu-ios-cocos2d-viking-cba07f8.zip

    Cocos2D是一个流行的开源游戏引擎,尤其适用于2D游戏开发。它为开发者提供了丰富的功能,包括场景管理、动画制作、物理引擎支持以及精灵图(Sprite)的处理等。 在iOS平台上,Cocos2D通常与Objective-C或Swift语言...

    iOS 5 cocos2d 游戏开发实战(第2版)

    通过合理的学习和练习,读者可以从基础开始,逐步掌握cocos2d游戏开发的各个方面,包括游戏逻辑的设计、场景的创建、角色的控制、交互的处理等,并能将这些知识点应用于iOS5平台上游戏的开发。 为了更好地利用本书...

    iOS实例开发源码——iOS-Gamer-Cocos2D-86714e3.zip

    本篇将深度探讨一款基于Cocos2D框架的iOS游戏源码,通过分析“iOS-Gamer-Cocos2D-86714e3.zip”这个压缩包中的内容,我们将了解Cocos2D框架如何在iOS平台上构建游戏,以及在实际开发中的一些关键知识点。 Cocos2D是...

    Quick-Cocos2dx-Community 3.6.5

    Cocos2d-x是一个广泛使用的跨平台游戏开发框架,用C++编写,支持iOS、Android、Windows以及多个其他操作系统。Quick-Cocos2dx则是它的JavaScript和Lua接口,旨在提供更高效、更便捷的游戏开发体验。 在Quick-Cocos2...

    iOS游戏应用源代码——iOS-Gamer-Cocos2D-86714e3.zip

    Cocos2D是一款广泛用于创建2D游戏、演示和其他图形交互内容的开源游戏引擎,尤其适合初学者和专业开发者。下面将详细介绍这个源代码可能涉及的关键知识点。 1. **Cocos2D框架**:Cocos2D是用Objective-C编写的,...

Global site tag (gtag.js) - Google Analytics