http://cankeyyin.blog.163.com/blog/static/12336178320124149391202/

原理:将iphone的hd图片给ipad用,即:

  • 使用原iphone版HD资源(960*640),不用适配到1024*768,四周可留黑边
  • 不改动原有逻辑代码

经测试,这个适配方法可以让一份代码同时运行与iphone、iphone retina、ipad、ipad retina四种分辨率。

1.让ipad能够读入HD图片

在cocos2d-x源代码CCFileUtils_ios.mm中,将所有

cocos2d::CC_CONTENT_SCALE_FACTOR() == 2

改成

cocos2d::CC_CONTENT_SCALE_FACTOR() == 2 || (UI_USER_INTERFACE_IDIOM() ==UIUserInterfaceIdiomPad

2.让ipad显示640*960游戏区域,并居中

在iOS/AppController.mm中,将

EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]

pixelFormat: kEAGLColorFormatRGBA8

depthFormat: GL_DEPTH_COMPONENT16_OES

preserveBackbuffer: NO

sharegroup: nil

multiSampling: NO

numberOfSamples: 0 ];

改成(此处为竖屏分辨率,横屏调换可x,y坐标):

EAGLView *__glView = nil;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

__glView = [EAGLView viewWithFrame: CGRectMake(0, 0, 320, 480)

pixelFormat: kEAGLColorFormatRGBA8

depthFormat: GL_DEPTH_COMPONENT16_OES

preserveBackbuffer: NO

sharegroup: nil

multiSampling: NO

numberOfSamples: 0 ];

__glView.transform = CGAffineTransformMakeScale(1.0, 1.0);

__glView.frame = CGRectMake((768-640)/2,(1024-960)/2, 640,960);//屏幕窗口

}

else {

__glView = [EAGLView viewWithFrame: [window bounds]

pixelFormat: kEAGLColorFormatRGBA8

depthFormat: GL_DEPTH_COMPONENT16_OES

preserveBackbuffer: NO

sharegroup: nil

multiSampling: NO

numberOfSamples: 0 ];

}

3.开启Retina分辨率

classes/AppDelegate中:

pDirector->enableRetinaDisplay(true);

4.坐标调整 某些情况下坐标坐标会扩展到640,960 所以需要用百分比的形式表示坐标

int screenWidth=CCDirector::sharedDirector()->getWinSize().width;

int screenHeitht=CCDirector::sharedDirector()->getWinSize().height;

如果原来有用坐标跟常数运算,比如ccp(x+常数,y-常数)这一类,常数要变换一下

坐标常数=坐标常数* screenWidth/320;

5.以上步骤完成后,可以在iphone、iphone retina、ipad上正常运行,但不能在ipad retina上运行,要在pad retina运行,需要在源代码CCEGLView_ios.mm加入以下代码,

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) return false;

bool CCEGLView::canSetContentScaleFactor()

{

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) return false;

return [[EAGLView sharedEGLView] respondsToSelector:@selector(setContentScaleFactor:)]

&& [[UIScreen mainScreen] scale] != 1.0;

}

6.将程序设置为universal形式

Build Settings->Deployment->Targeted Device Family设置成iphone/ipad

[转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率的更多相关文章

  1. 在Git中添加一个项目

    首先保证Git服务器正确配置,管理员机器可正常连接并使用Git. 第一步:在服务器上新建一个项目仓库 切换到git用户: a@ubuntu:/home/git$ su - git $ cd /home ...

  2. sitecore系统教程之体验编辑器中创建一个项目

    您可以使用体验编辑器创建新项目并将其直接插入网页. 注意 如何在Sitecore中创建项目可能会有所不同,具体取决于您拥有的安全角色以及网站的设置方式. 要插入新项目: 在体验编辑器中,导航到要添加新 ...

  3. java 中的一个项目如何做到访问另一个项目的一个方法 或者 页面

    两种方法:1.将一个项目打成jar包,第二个项目进行导入该jar包,就可以使用第一个项目里的类方法属性等2.将第一个项目发布出去,然后第二个项目调用,所谓发布出去就是开发远程接口,允许其他人调用.

  4. Eclipse中对一个项目进行复制粘贴为一个新项目

    1:对目标项目执行右键,选择“Copy”,然后在空白处右键,选择“Paste”结果如下图: 2:右键新项目,点击Properties, 3:打开Navigator视图 4:打开.settings文件夹 ...

  5. PHP中的循环while、do...while、for、foreach四种循环。

    php中的while循环,循环执行代码块制定的次数,或者当指定的条件为真时循环执行代码块. 在我们编写代码是时候,我们经常需要一块代码块重复执行多次.我们就可以使用while循环语句来完成这个任务. ...

  6. Struts2中获取Web元素request、session、application对象的四种方式

    我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...

  7. [Angularjs] 第一步开始一个项目

    [Angularjs] 第一步开始一个项目 一.什么是angularjs angularjs是2009年兴起的,目前由Google维护一个采用mvc模式的js框架,很多时候用来创建单页面应用.我也经常 ...

  8. Eclipse中的android项目前面有叹号 (转)

    问题描述:在Eclipse中导入一个项目,在项目名上有感叹号出现,基本上是由于build path的问题. 解决方法: 在项目上右击-->build path -> configure b ...

  9. JAVA中运用数组的四种排序方法

    JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进 ...

随机推荐

  1. Linux CPAN Perl 模块安装

    当我们想使用某些Perl模块的时候,很可能会遇到当前系统不存在这个模块的情况,这时我们可以通过使用CPAN来对相应的模块进行获取,下面就介绍一下CPAN的使用方法.首先,我们可以用perl -e 'u ...

  2. CentOS下搭建SVN

    1.安装svn yum -y install subversion 2.创建hydata目录 mkdir -p /var/svn/hydata 3.创建 m 目录 mkdir -p /var/svn/ ...

  3. Spring注解@Component、@Repository、@Service、@Controller区别 .

    Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...

  4. BLE资料应用笔记 -- 持续更新

    BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...

  5. 【Mail】JavaMail发送带附件的邮件(二)

    上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...

  6. linux系统编程之I/O内核数据结构

    文件在内核中是用三种数据结构进行表示的 (1)文件描述符表:文件描述符表是一个结构体数组,数组的下标就是open函数返回的文件描述符. 文件描述符表的每一个记录有两个字段   *文件描述符标志 * 文 ...

  7. 【线段树】bzoj1018 [SHOI2008]堵塞的交通traffic

    线段树的每个叶子节点存一列. 每个节点维护六个域,分别是左上左下.左上右上.左上右下.左下右上.左下右下.右上右下在区间内部的连通性,不考虑绕出去的情况. 初始每个叶子的左上左下.右上右下是连通的. ...

  8. CodeForces 743C Vladik and fractions (数论)

    题意:给定n,求三个不同的数满足,2/n = 1/x + 1/y + 1/z. 析:首先1是没有解的,然后其他解都可以这样来表示 1/n, 1/(n+1), 1/(n*(n+1)),这三个解. 代码如 ...

  9. Bootstrap 3 简介

    Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first pr ...

  10. webkit浏览器css设置滚动条

    主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端的按钮 ::-webkit-scroll ...