cocos2d-x 屏幕分辨率适配方法
转自:http://blog.csdn.net/somestill/article/details/9950403
- bool AppDelegate::applicationDidFinishLaunching()
- {
- // initialize director
- CCDirector *pDirector = CCDirector::sharedDirector();
- pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
- CCSize frameSize = CCEGLView::sharedOpenGLView()->getFrameSize();
- CCSize lsSize = CCSizeMake(, );
- float scaleX = (float)frameSize.width/lsSize.width;
- float scaleY = (float)frameSize.height/lsSize.height;
- float scale = 0.0f; // MAX(scaleX, scaleY);
- if (scaleX > scaleY) {
- // 如果是 X 方向偏大,那么 scaleX 需要除以一个放大系数,放大系数可以由枞方向获取,
- // 因为此时 FrameSize 和 LsSize 的上下边是重叠的
- scale = scaleX / (frameSize.height / (float) lsSize.height);
- } else {
- scale = scaleY / (frameSize.width / (float) lsSize.width);
- }
- CCEGLView::sharedOpenGLView()->setDesignResolutionSize(lsSize.width * scale, lsSize.height * scale, kResolutionNoBorder);
- // turn on display FPS
- pDirector->setDisplayStats(true);
- // set FPS. the default value is 1.0/60 if you don't call this
- pDirector->setAnimationInterval(1.0 / );
- // create a scene. it's an autorelease object
- CCScene *pScene = HelloWorld::scene();
- // run
- pDirector->runWithScene(pScene);
- return true;
- }
首先,在前期进行拉伸,之后,如果出现黑边,后期,在通过调整背景图片进行填充:
- CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
- if ((int)(visibleSize.width + 0.5) != ) {
- float max_width = MAX(visibleSize.width, );
- float min_width = MIN(visibleSize.width, );
- m_bg->setScaleX(max_width/min_width);
- }
- else{
- float max_width = MAX(visibleSize.height, );
- float min_width = MIN(visibleSize.height, );
- m_bg->setScaleY(max_width/min_width);
- }
这样,就能既不失真,又不会出现黑边。 推荐看这里,讲解的非常详细。
- // 组[1] :
- FrameSize: width = , height =
- WinSize: width = , height =
- VisibleSize: width = , height =
- VisibleOrigin: x = , y =
- // 组[2] :相比 组 [1] FrameSize 不变 VisibleSize 和 VisibleOrigin 随着 WinSize 的变小而变小
- FrameSize: width = , height =
- WinSize: width = , height =
- VisibleSize: width = , height =
- VisibleOrigin: x = , y =
- // 组[3] : 相比组 [1] WinSize 不变,VisibleSize 随着 FrameSize 的比例改变而改变
- FrameSize: width = , height =
- WinSize: width = , height =
- VisibleSize: width = , height =
- VisibleOrigin: x = , y =
- // WinSize VisibleSize VisibleOrigin 与都设计的分辨率相关,满足如下关系
- WinSize.width = (VisibleOrigin.x * ) + VisibleSize.width
- WinSize.height = (VisibleOrigin.y * ) + VisibleSize.height
其中,frameSize为屏幕分辨率,winSize为设计分辨率,visibleSize为可用分辨率(可用区域)
FrameSize 是实际的屏幕分辨率,而 VisibleSize 是在 WinSize 之内,保持 FrameSize 的宽高比所能占用的最大区域,实际屏幕分辨率可以大于 WinSize ,但VisibleSize 一定会小于或者等于 WinSize,这两者相同的是宽高比。VisibleSize 有着 WinSize 大小(随WinSize 的大小改变而改变),还有着 FrameSize 的宽高比,它标示 在设计分辨率(WinSize)下,在屏幕中的可见区域大小。
我们可以通过如下方法获取到 setDesignResolutionSize 所设置的值:
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
cocos2d-x 屏幕分辨率适配方法的更多相关文章
- Unity 利用NGUI做屏幕分辨率适配+学习UIDraggablePanel的使用
原地址:http://blog.sina.com.cn/s/blog_697b1b8c0101g2r4.html 大家使用unity,一定有看中其跨平台的强大功能,因此也难免会遇到不同屏幕分辨率适配的 ...
- Android屏幕分辨率获取方法--源码剖析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在适配的过程中,有时我们会用到屏幕宽高,那么如何获得屏幕的分辨率? 方法有两种: 第一种是通过Win ...
- 3.QT屏幕分辨率适配
需求:qt的窗口.组件.字体需要适配屏幕分辨率. 思路:qt是根据显示器的物理长度或者宽度于分辨率的关系来计算dpi 实现: #if(QT_VERSION >= QT_VERSION_CHECK ...
- Cocos2D中屏幕分辨率解释
Cocos2D的坐标(0,0)点在屏幕的左下角,然后x和y的坐标值像右上角逐渐增加. 因为项目一般是横屏(landscape)模式,这表示右上角坐标在3.5寸屏上为(480,320), 在4寸屏上为( ...
- Android4.0以上版本比较靠谱的获取手机屏幕分辨率的方法
/** * 获取虚拟按键栏高度 * * @param context * @return */ public static int getNavigationBarHeight(Context con ...
- 获取屏幕分辨率(C/C++)
C/C++获取屏幕分辨率的方法 int main(int argc, char* argv[]) { // 需要添加头文件: // #include <Windows.h> system( ...
- 获取屏幕分辨率(C#)
C#获取屏幕分辨率的方法 static void Main(string[] args) { // 控制台程序,需要添加程序集: // using System.Drawing; // using S ...
- 07、在 Windows10 上获得屏幕分辨率
因为在 win10 上,app 在运行的时候,默认不是占满全屏幕,并且 windows runtime 当前没有提供获取 屏幕尺寸的 api.在桌面 win32 api 中,可以获取屏幕尺寸,不过因为 ...
- C#如何动态设置屏幕分辨率
C#如何动态设置屏幕分辨率 作者:Learning hard 这篇文章主要为大家详细介绍了C#动态设置屏幕分辨率的方法,我们可以使用Screen类设置屏幕分辨率,感兴趣的小伙伴们可以参考一下 下面就不 ...
随机推荐
- 关于Android app的launcher图标更换后,仍然显示默认的ic_launcher图标的解决方法
<h1>概要</h1>在做手机适配的时候,遇到了一个很奇怪的问题,在1080x720的手机可以正常显示替换的ic_launcher.png图标,但是在1920x1080的手机上 ...
- spring属性注入方式
一.使用有参构造注入属性 配置文件 constructor-arg标签是需注入属性的名字 User类 生成了User的有参构造函数 测试类 结果 打印出了name属性的值 二.使用set方法注入属性 ...
- Linux中的man
1.查看命令的帮助信息 man mkdir 2.查看服务配置文件的帮助信息 man services 说明: a.如果没有man通过yum install man安装 b.如果命令和服务同名了,那就指 ...
- JVM指令重排
指令重排的基本原则: a.程序顺序原则:一个线程内保证语义的串行性 b.volatile规则:volatile变量的写,先发生于读 c.锁规则:解锁(unlock)必然发生在随后的加锁(lock)前 ...
- Property Animator基本用法
ObjectAnimator anim=ObjectAnimator.ofFloat(textview, "alpha", 0f, 1f); //ObjectAnimator an ...
- static_new
<?php //在::操作符的左边写上类的名称来静态地访问某个成员,这样就可以避免创建类的实例. //这样不仅可以省略掉实例化类的代码,而且还会更高效,因为类的每个实例都会占用一小部分的系统资源 ...
- frontend-tools
收集整理好用的前端开发利器(Collect good front-end development tools ) 1.w3cplus前端工具 2.jsfiddle在线JS代码调试工具 3.w3cfun ...
- Redis的管理
一.redis持久化 redis是内存数据库,一切的数据都是存储到内存中的,我们知道,当服务器意外关机,那么在内存中的数据都将丢失,但是redis为我们提供持久化功能,这样就能把数据保存到硬盘上.re ...
- Python 3 mysql 数据类型
Python 3 mysql 数据类型 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/m ...
- hadoop 学习笔记:mapreduce框架详解(转)
原文:http://www.cnblogs.com/sharpxiajun/p/3151395.html(有删减) Mapreduce运行机制 下面我贴出几张图,这些图都是我在百度图片里找到的比较好的 ...