【IOS-COCOS2D游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/图片缩放后模糊透明/图片不清晰【2013年12月13日补充】/动画播放出现毛边以及禁止游戏中自动锁屏问题!
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/507.html
本章节主要为大家介绍在游戏开发过程中经常遇到的两个问题;
1. 解决滚屏背景或拼接地图有黑边!
对于游戏开发中,背景(游戏地图)是必要的元素之一,那么对于大部分游戏的背景都是动态,或者不断移动的;例如RPG中的背景随着人物、主角而移动,那么一般情况下背景都是由地图编辑器(图块)拼出来的,要不就是直接一整张大图去显示,在或者就是将一张大图进行裁减成N张,然后再进行拼接完成等等;
那么对于背景(地图)元素中存在的重复图块很少的话基本上就没有利用地图编辑器的必要了;在这里Himi不来介绍如何在cocos2d中使用地图编辑器做背景地图 ,而是介绍在cocos2d中制作滚动地图时利用拼接地图方式遇到的黑边问题;
如下图所示,背景是由3张图片拼接而成,如下3张图:
bgTile2.position=ccp(bgTile1.position.x+bgTile1.contentSize.width,bgTile1.position.y);
bgTile3.position=ccp(bgTile2.position.x+bgTile2.contentSize.width,bgTile2.position.y);
此时运行的截图如下:
从上图童鞋们就可以看到拼接有裂缝,那么接着让3个精灵从左向右不断的x轴+1进行移动,代码如下:
运行截图如下:
这时当移动到一定距离时候会发现刚才的缝隙消失了,是消失了,通过以上两张运行效果图可以说明:
在cocos2d中如图你使用拼接背景地图的方式去做的话,每处拼接处在移动时都会时不时的出现黑边(裂缝),至于如何解决我想童鞋们第一想法就是在裁图的时候多切出一像素的方法,第一张比如原来是100,故意裁出101,第二张绘制的时候X轴前一个像素…以此类推,还有些童鞋认为是美工的原因,可能在裁图的时候有透明像素的存在造成,当然美工裁图的不仔细确实是个不可排除的原因,但是最终解决的方案应该是将精灵设置贴图无锯齿的属性,这样就可以完美解决此问题,设置精灵贴图无锯齿方法如下:
bgTile2.position=ccp(bgTile1.position.x+bgTile1.contentSize.width,bgTile1.position.y);
bgTile3.position=ccp(bgTile2.position.x+bgTile2.contentSize.width,bgTile2.position.y); //让3个精灵都设置贴图无锯齿 [bgTile1.texture setAliasTexParameters];
再次运行效果图如下:
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给出在应用中禁止手机自动锁屏的代码,如下:
OK,本章介绍的知识点虽然很少解决的方法也很简单,但是也是游戏中最容易遇到的两个问题;
那么这里肯定会有不少童鞋认为本身一句代码的事情非写这么多进行说明,嗯 ,确实写的过于详细,但是Himi之所以写这么详细主要还是想让还没有遇到此类问题的童鞋清晰化此类问题出现的原因,这样能让更多童鞋减少以后遇到此问题的疑问~
这篇文章是上一篇文章 http://www.jianshu.com/p/c9083a105921 的拓展,不罗嗦了,直接上代码。 //创建毛玻璃效果的背景 func createFrostBackground (img:UIImage,view:UIView) { let w = self.
[ios开发]-APP-上架流程 由于苹果的机制,在非越狱机器上安装必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节。 AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传Appstore作了支持。 本文从三个流程来介绍如何实现AppCan在 线编译出ipa包,以及上传到苹果Appstore。
相关文章
- pytest运行_ios怎么清理应用缓存在哪里
- 《羊了个羊》山寨版就登上了iOS免费榜第一,绅士游戏《欲神幻想》上线
- iOS证书(.p12)和描述文件(.mobileprovision)制作
- 如何把小程序游戏运行到自有App中?(IOS篇)
- HBuilder X 连接苹果手机(IOS)详细教程。Windows: 连接iOS手机调试项目
- 苹果iOS app上架流程
- iOS App上架到appStore
- iOS常见文件及程序的启动原理详解手机开发
- [iOS]图片压缩&保存View为内容Img详解手机开发
- IOS 雪花飘落效果详解手机开发
- GitHub iOS-Top 100 简介详解手机开发
- MacOS 与 iOS:由浅入深的连接(macos和ios)
- 操作系统开启iOS时代:Linux操作系统的新篇章(ios是linux)
- Linux与iOS:同源不同道(linux与ios的关系)
- Linux与iOS:越来越亲密的合作伙伴(linux与ios)
- 谷歌率先在iOS上推出删除最后15分钟搜索历史记录的快捷方式
- 基于Linux环境下iOS应用开发实践(linux下开发ios)
- iOS 不是 Linux,而是苹果独特操作系统(ios是linux吗)
- 把 Linux 安装到 iOS 设备上的步骤(ios安装linux)
- 应用Linux上编译IOS应用:实现跨平台体验(linux编译ios)
- iOS 限免 App 精选:解谜游戏《Number Mazes》(¥18→0)
- 为什么Android的图片质量没有iOS的高?
- 探秘iOS:它究竟是一种基于Linux的操作系统吗?(ios是linux系统吗)
- IOS上可以安装Oracle吗(ios能装oracle吗)
- 移动端iOS技术实现Oracle数据库连接(ios联接oracle)
- iOS让Oracle无处不在(ios支持oracle么)
- iOS系统下的Oracle数据库环境(ios oracle)
- 新版 iOS/iPadOS 15 开发工具优先考虑 5G 而非 Wi-Fi