先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋····

每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!!

这次新项目专项针对android,目的性强,适配方案我觉得2套图去兼容android各种分辨率;

我们先了解一下android手机上的屏幕密度:

Android主要有以下几种屏:

QVGA和WQVGA屏density=120;

HVGA屏density=160;

WVGA屏density=240....更多 density值表示每英寸有多少个显示点;

和分辨率不一样,大部分做应用的就可以通过屏幕密度走,那么游戏中也可以类似走这种路线;

但是现在的出现了超高清屏幕,诸如小米,三星稍微比较高端一点新出的机型分辨率都非常之高达到FHD;

FHD级别就是我们所谓的屏幕像素达到了1920*1080P格式,也就是全高清屏幕的简称了,要适应这种屏幕得单独适配;

废话不多了就直接上解决方案吧:

思路1:背景适配,然后往背景里面add部分UI原件的方法。先解决背景适配;
思路2:根据屏幕尺寸,去适应“屏幕窗口UI原件”,不属于任何原件直接Add到CClayer中的;

代码如下:

先建立一个VisibleRect类去通过CCEGLView拿到屏幕尺寸,然后再取八个点作为静态方法以后直接当做目标定位使用

#ifndef __VISIBLERECT_H__
#define __VISIBLERECT_H__#include "cocos2d.h"
USING_NS_CC;class VisibleRect
{
public:static CCRect getVisibleRect();static CCPoint left();static CCPoint right();static CCPoint top();static CCPoint bottom();static CCPoint center();static CCPoint leftTop();static CCPoint rightTop();static CCPoint leftBottom();static CCPoint rightBottom();
private:static void lazyInit();static CCRect s_visibleRect;
};#endif /* __VISIBLERECT_H__ */

VisibleRect.cpp

#include "VisibleRect.h"CCRect VisibleRect::s_visibleRect;void VisibleRect::lazyInit()
{if (s_visibleRect.size.width == 0.0f && s_visibleRect.size.height == 0.0f){CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();s_visibleRect.origin = pEGLView->getVisibleOrigin();s_visibleRect.size = pEGLView->getVisibleSize();}
}CCRect VisibleRect::getVisibleRect()
{lazyInit();return CCRectMake(s_visibleRect.origin.x, s_visibleRect.origin.y, s_visibleRect.size.width, s_visibleRect.size.height);
}CCPoint VisibleRect::left()
{lazyInit();return ccp(s_visibleRect.origin.x, s_visibleRect.origin.y+s_visibleRect.size.height/2);
}CCPoint VisibleRect::right()
{lazyInit();return ccp(s_visibleRect.origin.x+s_visibleRect.size.width, s_visibleRect.origin.y+s_visibleRect.size.height/2);
}CCPoint VisibleRect::top()
{lazyInit();return ccp(s_visibleRect.origin.x+s_visibleRect.size.width/2, s_visibleRect.origin.y+s_visibleRect.size.height);
}CCPoint VisibleRect::bottom()
{lazyInit();return ccp(s_visibleRect.origin.x+s_visibleRect.size.width/2, s_visibleRect.origin.y);
}CCPoint VisibleRect::center()
{lazyInit();return ccp(s_visibleRect.origin.x+s_visibleRect.size.width/2, s_visibleRect.origin.y+s_visibleRect.size.height/2);
}CCPoint VisibleRect::leftTop()
{lazyInit();return ccp(s_visibleRect.origin.x, s_visibleRect.origin.y+s_visibleRect.size.height);
}CCPoint VisibleRect::rightTop()
{lazyInit();return ccp(s_visibleRect.origin.x+s_visibleRect.size.width, s_visibleRect.origin.y+s_visibleRect.size.height);
}CCPoint VisibleRect::leftBottom()
{lazyInit();return s_visibleRect.origin;
}CCPoint VisibleRect::rightBottom()
{lazyInit();return ccp(s_visibleRect.origin.x+s_visibleRect.size.width, s_visibleRect.origin.y);
}

有了这个工具类可以做很多事情了;

下面我们需要去适配背景,具体方法如下:

CCSprite* PublicShowUI::setTagScale(CCSprite* tagSprite)
{float last_X,last_Y;float X2 = tagSprite->getContentSize().width;float Y2 = tagSprite->getContentSize().height;last_X = ( (float)VisibleRect::getVisibleRect().size.width/X2) ;last_Y = ( (float)VisibleRect::getVisibleRect().size.height/Y2);tagSprite->setScaleX(last_X);tagSprite->setScaleY(last_Y);return tagSprite;}

要适应各种大小分辨率,一套图是不够用的,根据自己项目的需要去制作2套图,我推荐的是如下分辨率套图:

800*480 一套

1136*640 二套

HD高清 第三套 1920 * 1080 目前手机上面比较高的,据说三星的超过2000,可以自己去设定!

有了这些图,分别整理自己的资源文件夹然后去适配,代码如下:

/*******************获取屏幕分辨率*根据分辨率计算使用哪一套资源******************/
int PublicShowUI::getinch(void)
{int lastinch = -1;CCSize winSizeInPixels = screenSize;if(winSizeInPixels.width>=800&&winSizeInPixels.width<=960){lastinch = INCH_1;//ihpone3.5寸
    }else if(winSizeInPixels.width>960&&winSizeInPixels.width<=1136){lastinch = INCH_2;//ihpone4寸及大部分android4寸左右屏幕
    }else if(winSizeInPixels.width>1136&&winSizeInPixels.width<=1920){lastinch = INCH_MAX;//超高清屏幕
    }else{lastinch = INCH_2;}return lastinch;
}/*******************根据自定义图片路径去取不同套图的路径*imgres 格式:imgdir%d/imgname.png******************/
CCString* PublicShowUI::getResImgPath(char* imgres)
{sprintf(str, imgres ,getinch());return CCString::create(str);
}

获取屏幕分辨率screenSize:

CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
pDirector->setOpenGLView(pEGLView);
CCSize screenSize = pEGLView->getFrameSize();

使用:

view_Room = new View_Room(this, PublicShowUI::getResImgPath(IMG_ROOM_BACKGROUND), 1, VisibleRect::center());

背景图一定要居中显示:

VisibleRect::center()

OK以上便是我适配的方案和思路;

下面我上2张IOS模拟器上的图,我故意再背景图的边框加了绿线,来显示区别显示全屏,然后用了两套图去适配!

3.5寸IOS的分辨率如下:

4寸分辨率如下:

【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】相关推荐

  1. 【cocos2d-x 手游研发小技巧(2)循环无限滚动的登陆背景】

    原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html 首先让大家知道我们想要实现的最终效果是什么样的? 看一个<逆天仙魔 ...

  2. 【cocos2d-x 手游研发小技巧 循环无限滚动的登陆背景】

    原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html 首先让大家知道我们想要实现的最终效果是什么样的? 看一个<逆天仙魔 ...

  3. 英雄纹章2 android,《童话萌消团》手游过关小技巧 游戏黑洞的福音

    烧脑战斗童话消除手游<童话萌消团>现已开启安卓公测,5月10日将开启全平台公测,iOS用户可通过官网或战盟预约,千万不要错过.<童话萌消团>是多益网络自研的新一代消除休闲手游诚 ...

  4. 【cocos2d-x 手游研发----目录】

    感谢大家一直支持我写这样一系列的博客,从中我自己也获益良多,cocos2d-x这样一款非常棒的引擎,是值得我们去学习和分享的,谈到分享,那我就把这套写了差不多一两个月的框架给大家开源下载,写的很一般, ...

  5. 【cocos2d-x 手游研发----地图活起来了】

    谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...

  6. 【cocos2d-x 大型ARPG手游研发----地图活起来了】

    谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...

  7. 手游研发CJ抱大腿指南

    文摘要:CJ来了,又是一年一度的游戏圈盛事,随着手游行业的迅速崛起,今年CJ上,手游研发商以及发行商必定成为焦点.由于门槛低.市场热.前景好等因素的影响,国内一下子蹦出一大堆手游研发团队.很幸运(或者 ...

  8. android linux 优化,【「Android」UE手游研发中,如何做好Android内存优化?】|Linux|DEX|腾讯游戏|_傻大方...

    傻大方提要:[「Android」UE手游研发中,如何做好Android内存优化?]编者按在大年夜多半人的印象里,用UE引擎制造出来的游戏实际占用内存会比较高.腾讯游戏学院专家Leonn,将和大年夜家分 ...

  9. 手游传奇刷元宝_战神传奇手游刷元宝方法技巧大全

    战神传奇手游里元宝是非常重要的,如何快速刷元宝呢?接下来小编介绍下战神传奇手游刷元宝方法技巧,希望对大家有所帮助! 1 .怪物攻城 怪物攻城这个活动必须参加,因为这个活动每天三次,而且每次送的元宝都超 ...

最新文章

  1. 乘“云原生”之风、踏“数字化”的浪,《新程序员003》开启预售!
  2. 第一个Mybatis程序示例 Mybatis简介(一)
  3. 今天下棋,结合以前一些技巧的总结
  4. 零基础Python学习路线图,小白的进阶之路!
  5. 接收请求处理流程_从Tomcat入口了解Spring MVC的请求处理流程(2)问题答疑
  6. API之子窗口创建 (转)
  7. MyEclipse的快捷使用(含关联源码和Doc的方式)
  8. workbench动力学周炬_ANSYSWorkbench有限元分析实例详解(动力学)
  9. linux化学公式软件下载,化学公式编辑器下载-Efofex FX Chem(化学公式编辑器)下载 v3.004.0 官方特别版-IT猫扑网...
  10. 软件测试(测试开发之测试工具开发1——helloworld)
  11. 20个免费网站测试工具
  12. 用python写一个简单的名片管理系统
  13. 发展指标集数据合集(37W+条数据)
  14. ABT 共识社区北京聚会 共建去中心化生态 | ArcBlock 社区
  15. 中文编程从入门到精通中文编程语言教学视频
  16. MySQL——————表的查询
  17. python计算十年平均录取率_如何在Python中使用Pandas计算多年平均值
  18. 从零开始写Python爬虫---1.1 requests库的安装与使用
  19. shadowplay要下载java,BBC 100件藏品中的世界史083:Shadow puppet of Bima皮影戏字符段
  20. PHP调用外部程序的方法解析

热门文章

  1. 字符串声明太大出现错误_搜索框输入中文出现单引号报错问题
  2. java jdbc 表存在_使用JDBC查询是否存在某表或视图,按月动态生成表
  3. Java项目:考试系统Java基础Gui(java+Gui)
  4. php复选框关联数据库字段,通过php将复选框中的多个值插入数据库
  5. 锐捷交换机配置snmp版本_snmp交换机配置
  6. uniapp富文本兼容视频实现方案
  7. web-view 跳转小程序页面 网页跳转小程序
  8. iOS 跑马灯之 TXScrollLabelView
  9. activemq 消息阻塞优化和消息确认机制优化
  10. linux下jdk简单配置记录