[转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率
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四种分辨率的更多相关文章
- 在Git中添加一个项目
首先保证Git服务器正确配置,管理员机器可正常连接并使用Git. 第一步:在服务器上新建一个项目仓库 切换到git用户: a@ubuntu:/home/git$ su - git $ cd /home ...
- sitecore系统教程之体验编辑器中创建一个项目
您可以使用体验编辑器创建新项目并将其直接插入网页. 注意 如何在Sitecore中创建项目可能会有所不同,具体取决于您拥有的安全角色以及网站的设置方式. 要插入新项目: 在体验编辑器中,导航到要添加新 ...
- java 中的一个项目如何做到访问另一个项目的一个方法 或者 页面
两种方法:1.将一个项目打成jar包,第二个项目进行导入该jar包,就可以使用第一个项目里的类方法属性等2.将第一个项目发布出去,然后第二个项目调用,所谓发布出去就是开发远程接口,允许其他人调用.
- Eclipse中对一个项目进行复制粘贴为一个新项目
1:对目标项目执行右键,选择“Copy”,然后在空白处右键,选择“Paste”结果如下图: 2:右键新项目,点击Properties, 3:打开Navigator视图 4:打开.settings文件夹 ...
- PHP中的循环while、do...while、for、foreach四种循环。
php中的while循环,循环执行代码块制定的次数,或者当指定的条件为真时循环执行代码块. 在我们编写代码是时候,我们经常需要一块代码块重复执行多次.我们就可以使用while循环语句来完成这个任务. ...
- Struts2中获取Web元素request、session、application对象的四种方式
我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...
- [Angularjs] 第一步开始一个项目
[Angularjs] 第一步开始一个项目 一.什么是angularjs angularjs是2009年兴起的,目前由Google维护一个采用mvc模式的js框架,很多时候用来创建单页面应用.我也经常 ...
- Eclipse中的android项目前面有叹号 (转)
问题描述:在Eclipse中导入一个项目,在项目名上有感叹号出现,基本上是由于build path的问题. 解决方法: 在项目上右击-->build path -> configure b ...
- JAVA中运用数组的四种排序方法
JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进 ...
随机推荐
- AC算法 及python实现
零 导言 软件安全课上,老师讲了AC算法,写个博客,记一下吧. 那么AC算法是干啥的呢? ——是为了解决多模式匹配问题.换句话说,就是在大字符串S中,看看小字符串s1, s2,...有没有出现. AC ...
- div+css实例教程
DIV+CSS是WEB设计标准,它是一种网页的布局方法.与传统中通过表格(table)布局定位的方式不同,它可以实现网页页面内容与表现相分离. 对于初学者来说,可能比较模糊不熟悉.毕竟,样式布局需要通 ...
- 使用Scala实现文件单词计数
package com.dtapp.base import scala.io.Source object WCntApp { def main(args: Array[String]) { val f ...
- Java和Ibatis调用存储过程并取得返回值详解
Java和Ibatis调用存储过程并取得返回值详解 2011-07-19 17:33 jiandanfeng2 CSDN博客 字号:T | T 本文主要介绍了Java和Ibatis调用存储过程的方法, ...
- 类Collections的静态方法的使用(代码)
package cn.itcast.p2.toolclass.collections.demo; import java.util.ArrayList; import java.util.Collec ...
- 【转】mac os 安装php
安装PHP 添加brew的PHP扩展库: brew update brew tap homebrew/dupes brew tap josegonzalez/homebrew-php 可以使用brew ...
- 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
第一次接触gtk+.在网上搜罗良一番,装好相应的库后,编写了第一hello程序.在编译时输入以下命令:gcc -o hello hello.c 'pkg-config --cflags --libs ...
- 接口测试总结<转>
本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系.但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为 ...
- Java程序,猜大小游戏
一个骰子,通常有1.2.3.4.5.6等6种点数.我们将1.2.3记作“小”,将4.5.6记作“大”.猜中显示“猜对了”,猜错记作“猜错了”之类的字样.本程序可以用Java实现. import jav ...
- btn-default
Bootstrap 还有一种属于按钮的 class 属性叫做btn-default . to