今天正式开始学习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步:

  1. 调用CCDirector的函数enableRetinaDisplay来开启retina显示支持。如果你使用cocos2d模板,那么只需要把app delegate里面对这句函数调用的注释去掉即可!
  2. 往你的程序中添加2倍大小的精灵图片,但是,这里命名不是增加@2x后缀,而是使用-hd(如:sample-hd.png)。当你加载精灵的时候,使用不带-hd后缀的图片名字,当cocos2d被部署到支持retina显示的设备上时,就会自动加载高清的图片。
  3. 当你在cocos2d里面设置精灵坐标的时候,使用的是点,而不是像素。注意:有些api使用的是像素,这些方法中都包含pixel字样,比如position和positionInPixel。InPixels;

  因此,你只需要让美工提供给你高清格式的图片就行了,你可以很容易地使用软件把这些高清图片变得普清图片。比如TexturePacker就可以做这样的事。

  你可能会奇怪,为什么需要准备两种不同格式的图片--为什么不每次都加载高清的图片,然后当需要普清图片的时候,用程序来缩放?好吧,因为把纹理(texture)加载到内存里面是非常消耗内存的操作,如果某个程序被安装在不支持高清显示的设备上面(比如IPOD2),那么你就会占用两倍大小的内存,当然是相比于只加载普清的图片的程序。(因为高清图片像素个数多一倍,所以必须消耗的内存要大。正确的做法就是前面说的,提供两套图片。)

  不用担心,你没有必要在photoshop里面不停地缩放图片的尺寸。TexturePaker里面有一个非常好的功能,可以很容易地通过高清图片得到对应的普清图片,这种方法在后面的教程中会讲到。

关于Cocos2d-x的enableRetinaDisplay函数相关推荐

  1. cocos2d pod_Cocos2D-X权威指南(第2版)[按需印刷]

    第一部分 基础篇 本部分内容 第1章认识Cocos2D-X 第2章搭建跨平台的开发环境 第3章Cocos2D-X中的核心类 第4章Cocos2D-X中的图片渲染类 第5章Cocos2D-X中的动作.特 ...

  2. cocos2dx c++实现小游戏--华容道

    华容道是一款中国民间的小游戏,童年的回忆(百度百科链接).玩法很多,具体规则这不再赘述. 这里使用的是c++进行编写, 编译器为xcode,内容并不复杂.主要功能包括,计步,重置,退回,保存.资源文件 ...

  3. 手游作弊大盘点,看看你了解几项?

    伴随着手机便利性的提高,手游获得越来越多的游戏玩家青睐. 庞大手游用户群体之中混杂着部分"作弊用户",他们既影响其他玩家的体验,也侵害了游戏开发商的利益.其背后的外挂开发者通常以低 ...

  4. 基于Cocos2d-x的英雄联盟皮肤选择菜单

    最终效果图 英雄联盟皮肤选择 设计说明 实现目标所需要的动作 移动(MoveTo),伸缩(ScaleTo),倾斜(OrbitCamera) 实现目标所需要函数(这是一个数学函数) x/(x+a) 其中 ...

  5. Android游戏开发十日通(7)- 开发一个双人游戏

    提要 游戏需要分享才能获得快乐,想想你以前玩过的那些游戏,那些会是真正地存在你婶婶的脑海里?是独自一人躲在被窝里酣战PSP,还是和哥们在网吧一起开黑?是一个人单刷迅龙三连,还是和朋友联机怒刷黄黑龙? ...

  6. cocos2d c 调用java_cocos2d-x之C++ 调用Java函数并接收返回值

    参考:http://blog.csdn.net/xiaominghimi/article/details/7602984 //java中string转C++中string #if (CC_TARGET ...

  7. (译)如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  8. 14. 如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  9. 【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数

    Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步到如下博文: [iOS-cocos2d-X 游戏开发之十三]详细讲解在 ...

最新文章

  1. 巧用Excel 2010数据透视表制作销售报表
  2. object+java+equals_java-为什么SparseIntArray.equals(Object)不起作用?
  3. 题目1090:路径打印
  4. 自定义Adapter中实现startActivityForResult的分析
  5. 谷歌浏览器linux版_Chrome apps 要被谷歌干掉了
  6. 推荐 7 个牛哄哄 Spring Cloud 实战项目
  7. SqlServerManagement新建数据库并执行sql文件流程
  8. java.io.tem_从屌丝到架构师的飞越(IO流篇)-转换流
  9. IOS开发CAKeyframeAnimation的基本使用与keypath的列举
  10. 修改input的placeholder颜色
  11. 哈尔滨现大雾天气 高速封闭航班推迟起飞
  12. 消息称AirPods 3搭载U1芯片 耳机柄变小
  13. 【Elasticsearch】Elasticsearch CPU高排查思路
  14. vivado global和out-of-context 选项
  15. SIFT算法流程介绍
  16. android电池管理软件,四款安卓手机电池管理软件横测
  17. 游戏经典题目之十字激光炮
  18. CODESOFT6 二维码中追加回车
  19. verilog的一些技巧,就靠他拿offer了!
  20. EPUB阅读器聚合-Android

热门文章

  1. 百舸争流,盘点我国主流区块链企业联盟链技术与应用
  2. c语言exp2是什么函数,C ++ STL中的exp2()函数
  3. CutterMan 一款神奇的切图工具
  4. 宏基因组数据分析专题之展望与数据质控
  5. 2019中国科技高光时刻:克隆杂交稻种子 海上发射火箭
  6. waimai-cps:美团红包饿了么红包CPS小程序+ H5 +推出外卖红包应用,带有后台代码,安装超级简单-源码
  7. js实现的老黄历项目总结
  8. 晶晨S905X4对比晶晨S905X3 晶晨S905X4和晶晨S905X3区别
  9. NRZ、NRZI编码
  10. jquery-easyui简介和初步使用