关于Cocos2d-x的enableRetinaDisplay函数
今天正式开始学习cocos2d-x,一上来就遇到一个问题,看到事例代码中
bool AppDelegate::applicationDidFinishLaunching()
{// initialize directorCCDirector *pDirector = CCDirector::sharedDirector();pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());// enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.if(SysFunc::IsIPhone()) pDirector->enableRetinaDisplay(true);// turn on display FPS
#ifdef _DEBUG
#ifndef WIN32pDirector->setDisplayFPS(true);#endif
#endif// set FPS. the default value is 1.0/60 if you don't call thispDirector->setAnimationInterval(1.0 / 60);// create a scene. it's an autorelease object//CCScene *pScene = HelloWorld::scene();// run//pDirector->runWithScene(pScene);ISceneFlow::init();return true;
}
pDirector->enableRetinaDisplay(true);这句代码的功能是什么?许多初学者应该和我一样,想搞清楚他究竟是什么东西。
注:事例图片取之于网上
在PC上开发完成后,如果要移植到手机端,那么需要添加enableRetinaDisplay(TRUE).否则程序就会崩溃。
一般在计算坐标,位置等动态数据时,如果写死,那么程序换了个平台后就会发生错误.
player->setPosition( ccp(winSize.width/2 +100, winSize.height/2) );
加了retina函数后,前面计算位置有加减的就要注意了,这个函数最直观就是给坐标位置放大了一倍,原理看下面引用。如上面例子,如果位置+100,用了enableRetinaDisplay后,就要改成+50,否则位置显示不对。所以坐标最好还是*N%(这是我第一次做游戏总结的经验),这样用了retina就没什么影响了。
同时在计算图片大小时,也不要将参数写死,使用GetContentSize()获取宽高比较正确。
注:CCLabelTTF里面的字体大小、宽高同样要注意,也是如此。
==================================================================
下面转载:
普通的iphone和支持高清显示的iphone之间的差别就是支持高清显示的iphone能够显示2倍的像素。因此(在landscape模式下),普通的iphone显示480×320个像素,而支持高清的iphone则可以显示960×640个像素。
“但是,请等一下”,你可能会问,“如果显示2倍数量的像素,那么不会破坏那些已经写好的假设屏幕大小只有480×320的应用程序吗?” 没错,特别是当你使用UIKit编程的时候,通常都是硬编码frame的大小。但是,如果你在UIKit里面指定frame大小的时候,实际的单位是点,而不是像素。
在一个普通的iphone上面(不支持retina display),一个点就等于一个像素。但是,在支持retina的iphone上面,一个点等于2个像素。因此,当你指定(10,10),在普通的iphone上面也是(10,10),而在支持retina的iphone上面,则是(20,20),因此,那会是同样的相对偏移量。(因为,像素加倍了,相对于图片来说,相对偏移量相等)。
当你在cocos2d里面设置精灵坐标的时候,使用的是点,而不是像素。注意:有些api使用的是像素,这些方法中都包含pixel字样,比如position和positionInPixel。
Retina Display and Cocos2D
告诉你们一个好消息--最新版本的cocos2d完全支持retina显示,而且使用这个功能只需要下列1-2-3步:
- 调用CCDirector的函数enableRetinaDisplay来开启retina显示支持。如果你使用cocos2d模板,那么只需要把app delegate里面对这句函数调用的注释去掉即可!
- 往你的程序中添加2倍大小的精灵图片,但是,这里命名不是增加@2x后缀,而是使用-hd(如:sample-hd.png)。当你加载精灵的时候,使用不带-hd后缀的图片名字,当cocos2d被部署到支持retina显示的设备上时,就会自动加载高清的图片。
- 当你在cocos2d里面设置精灵坐标的时候,使用的是点,而不是像素。注意:有些api使用的是像素,这些方法中都包含pixel字样,比如position和positionInPixel。InPixels;
因此,你只需要让美工提供给你高清格式的图片就行了,你可以很容易地使用软件把这些高清图片变得普清图片。比如TexturePacker就可以做这样的事。
你可能会奇怪,为什么需要准备两种不同格式的图片--为什么不每次都加载高清的图片,然后当需要普清图片的时候,用程序来缩放?好吧,因为把纹理(texture)加载到内存里面是非常消耗内存的操作,如果某个程序被安装在不支持高清显示的设备上面(比如IPOD2),那么你就会占用两倍大小的内存,当然是相比于只加载普清的图片的程序。(因为高清图片像素个数多一倍,所以必须消耗的内存要大。正确的做法就是前面说的,提供两套图片。)
不用担心,你没有必要在photoshop里面不停地缩放图片的尺寸。TexturePaker里面有一个非常好的功能,可以很容易地通过高清图片得到对应的普清图片,这种方法在后面的教程中会讲到。
关于Cocos2d-x的enableRetinaDisplay函数相关推荐
- cocos2d pod_Cocos2D-X权威指南(第2版)[按需印刷]
第一部分 基础篇 本部分内容 第1章认识Cocos2D-X 第2章搭建跨平台的开发环境 第3章Cocos2D-X中的核心类 第4章Cocos2D-X中的图片渲染类 第5章Cocos2D-X中的动作.特 ...
- cocos2dx c++实现小游戏--华容道
华容道是一款中国民间的小游戏,童年的回忆(百度百科链接).玩法很多,具体规则这不再赘述. 这里使用的是c++进行编写, 编译器为xcode,内容并不复杂.主要功能包括,计步,重置,退回,保存.资源文件 ...
- 手游作弊大盘点,看看你了解几项?
伴随着手机便利性的提高,手游获得越来越多的游戏玩家青睐. 庞大手游用户群体之中混杂着部分"作弊用户",他们既影响其他玩家的体验,也侵害了游戏开发商的利益.其背后的外挂开发者通常以低 ...
- 基于Cocos2d-x的英雄联盟皮肤选择菜单
最终效果图 英雄联盟皮肤选择 设计说明 实现目标所需要的动作 移动(MoveTo),伸缩(ScaleTo),倾斜(OrbitCamera) 实现目标所需要函数(这是一个数学函数) x/(x+a) 其中 ...
- Android游戏开发十日通(7)- 开发一个双人游戏
提要 游戏需要分享才能获得快乐,想想你以前玩过的那些游戏,那些会是真正地存在你婶婶的脑海里?是独自一人躲在被窝里酣战PSP,还是和哥们在网吧一起开黑?是一个人单刷迅龙三连,还是和朋友联机怒刷黄黑龙? ...
- cocos2d c 调用java_cocos2d-x之C++ 调用Java函数并接收返回值
参考:http://blog.csdn.net/xiaominghimi/article/details/7602984 //java中string转C++中string #if (CC_TARGET ...
- (译)如何使用cocos2d来制作一个打地鼠的游戏:第一部分
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- 14. 如何使用cocos2d来制作一个打地鼠的游戏:第一部分
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- 【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数
Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步到如下博文: [iOS-cocos2d-X 游戏开发之十三]详细讲解在 ...
最新文章
- 巧用Excel 2010数据透视表制作销售报表
- object+java+equals_java-为什么SparseIntArray.equals(Object)不起作用?
- 题目1090:路径打印
- 自定义Adapter中实现startActivityForResult的分析
- 谷歌浏览器linux版_Chrome apps 要被谷歌干掉了
- 推荐 7 个牛哄哄 Spring Cloud 实战项目
- SqlServerManagement新建数据库并执行sql文件流程
- java.io.tem_从屌丝到架构师的飞越(IO流篇)-转换流
- IOS开发CAKeyframeAnimation的基本使用与keypath的列举
- 修改input的placeholder颜色
- 哈尔滨现大雾天气 高速封闭航班推迟起飞
- 消息称AirPods 3搭载U1芯片 耳机柄变小
- 【Elasticsearch】Elasticsearch CPU高排查思路
- vivado global和out-of-context 选项
- SIFT算法流程介绍
- android电池管理软件,四款安卓手机电池管理软件横测
- 游戏经典题目之十字激光炮
- CODESOFT6 二维码中追加回车
- verilog的一些技巧,就靠他拿offer了!
- EPUB阅读器聚合-Android
热门文章
- 百舸争流,盘点我国主流区块链企业联盟链技术与应用
- c语言exp2是什么函数,C ++ STL中的exp2()函数
- CutterMan 一款神奇的切图工具
- 宏基因组数据分析专题之展望与数据质控
- 2019中国科技高光时刻:克隆杂交稻种子 海上发射火箭
- waimai-cps:美团红包饿了么红包CPS小程序+ H5 +推出外卖红包应用,带有后台代码,安装超级简单-源码
- js实现的老黄历项目总结
- 晶晨S905X4对比晶晨S905X3 晶晨S905X4和晶晨S905X3区别
- NRZ、NRZI编码
- jquery-easyui简介和初步使用