当前位置: 首页 > 编程日记 > 正文

【iOS-cocos2d-X 游戏开发之十六】Cocos2dx编译后的Android自动使用(-hd)高清图设置自适应屏幕...

本篇主要介绍Cocos2dx项目开发过程中或者说项目务必遇到的一些知识点(ps.貌似Himi博客写的都是务必的 :tx:  Himi认为写别人没写的才更容易吸引人不是~)

OK,不多说废话,第一个介绍的是修改项目配置让你的Android项目支持自适应屏幕;其实关于Android项目自适应屏幕这个问题,Himi实在不想再多费口舌,一方面因为Himi之前博文有说过,另外一方面现在Android开源缘故造成分辨率泛滥也成必然。大家注意做项目尽可能使用相对位置,别写死坐标,另外一点就是针对流行分辨率做适应就好了,如果你们公司很有必要铺Android市场的量,那么只能一个一个分辨率去搞了=。 = Himi身为Kjava(J2me)一路走过来的Dev来说,我是在是对自适应虐到习惯.....

1.  咳咳,本不想说,回到正题,那么对于Cocos2dx中如何设置项目Android版自适应,其实很easy,直接在编译好的Android项目中如下路径查找:

your Project name/Jni/helloworld/main.cpp

OK,找到main.cpp后双击打开,然后看到如下代码段:

  1. // if you want to run in WVGA with HVGA resource, set it
  2. view->create(480, 320); // Please change it to (320, 480);if you're in portrait mode.

view->create(480,320);默认关闭的,这里打开即可;其实Himi也是从cocos2dx引擎框架中看到的,打开你的任意一个cocos2dx引擎框架的项目,然后打开AppDelegate.cpp 文件,就能看到:

2. 下面继续介绍如何让你的cocos2dx-Android项目设置缩放比例,一样很easy,设置代码如下:

  1. CCDirector::sharedDirector()->setContentScaleFactor(2.0);

默认值是1.0,缩放2倍,从下面这两张图可以明显看出设置后的区别:(点击放大图片)

为了便于后续讲解更容易理解,那么这里Himi博文讲解使用的两行图片这里先给出,大家先看下:

rect.png     规格: 40*40         |            rect-hd.png 规格:80*80

3.下面介绍如何让cocos2dx的Android版项目使用iOS Retina类似@2x的-hd功能也直接使用高清图片,当然cocos2dx引擎默认找的高清图为-hd;但是编译Xcode的cocos2dx项目到Android版后,Android版可不会那么聪明自动使用你的-hd的版图片,所以下面Himi来手把手教你设置;具体步骤如下:

 3.1  首先在你的项目下找到  CCEGLView_android.cpp ,双击打开:

找到  void CCEGLView::create(int width, int height) 函数,然后函数内替换成如下代码:

  1. void CCEGLView::create(int width, int height)
  2. {
  3. if (width == 0 || height == 0)
  4. {
  5. return;
  6. }
  7. m_sSizeInPoint.width = width;
  8. m_sSizeInPoint.height = height;
  9. // calculate the factor and the rect of viewport
  10. m_fScreenScaleFactor =  MIN((float)m_sSizeInPixel.width / m_sSizeInPoint.width, (float)m_sSizeInPixel.height / m_sSizeInPoint.height);
  11. CCLOG("CCEGLView::Create / Screen Scale Factor = %f", m_fScreenScaleFactor);
  12. if (m_fScreenScaleFactor >= 1.5f)
  13. {
  14. CCLOG("CCEGLView::Create / HD Scale Factor => Increase Content Scale Factor");
  15. cocos2d::CCDirector::sharedDirector()->setContentScaleFactor(2.0f);
  16. }
  17. int viewPortW = (int)(m_sSizeInPoint.width * m_fScreenScaleFactor);
  18. int viewPortH = (int)(m_sSizeInPoint.height * m_fScreenScaleFactor);
  19. m_rcViewPort.origin.x = (m_sSizeInPixel.width - viewPortW) / 2;
  20. m_rcViewPort.origin.y = (m_sSizeInPixel.height - viewPortH) / 2;
  21. m_rcViewPort.size.width = viewPortW;
  22. m_rcViewPort.size.height = viewPortH;
  23. m_bNotHVGA = true;
  24. }

 3.2   继续在你的项目下找到CCFileUtils_android.cpp  类,双击打开:

找到  const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath) 函数,然后替换如下内容:

  1. const char* CCFileUtils::fullPathFromRelativePath(const char *pszRelativePath)
  2. {
  3. if (CC_CONTENT_SCALE_FACTOR() == 2.0f)
  4. {
  5. //CC_RETINA_DISPLAY_FILENAME_SUFFIX
  6. // verifier si suffix deja present
  7. std::string path = pszRelativePath;
  8. std::string::size_type pos = path.rfind("/") + 1// the begin index of last part of path
  9. std::string::size_type suffixPos = path.rfind(CC_RETINA_DISPLAY_FILENAME_SUFFIX);
  10. if ((std::string::npos != suffixPos) && (suffixPos > pos))
  11. {
  12. // => if yes, return path directly
  13. }
  14. else
  15. {
  16. // => if no, add "retina"/hd suffix and test if file exist
  17. CCString *pRet = new CCString();
  18. pRet->autorelease();
  19. pRet->m_sString = path.substr(0, path.rfind(".")) + CC_RETINA_DISPLAY_FILENAME_SUFFIX + path.substr(path.rfind("."), path.length());
  20. if (existFileData(pRet->m_sString.c_str()))
  21. {
  22. //    => if yes, return path with suffix
  23. CCLog("cocos2d: FilePath(%s) with suffix(%s) exist, use it.", pRet->m_sString.c_str(), CC_RETINA_DISPLAY_FILENAME_SUFFIX);
  24. return pRet->m_sString.c_str();
  25. }
  26. else
  27. {
  28. //    => if no, return path without suffix
  29. }
  30. }
  31. }
  32. return pszRelativePath;
  33. }

然后接着在本类添加如下两个函数:

  1. bool CCFileUtils::existFileData(const char* pszFileName)
  2. {
  3. string fullPath(pszFileName);
  4. if ((! pszFileName))
  5. {
  6. return false;
  7. }
  8. if (pszFileName[0] != '/')
  9. {
  10. // read from apk
  11. fullPath.insert(0"assets/");
  12. return CCFileUtils::existFileDataFromZip(s_strResourcePath.c_str(), fullPath.c_str());
  13. }
  14. else
  15. {
  16. do
  17. {
  18. // read rrom other path than user set it
  19. FILE *fp = fopen(pszFileName, "rb");
  20. if (fp != NULL)
  21. {
  22. fclose(fp);
  23. return true;
  24. }
  25. }
  26. while (0);
  27. }
  28. return false;
  29. }
  30. bool CCFileUtils::existFileDataFromZip(const char* pszZipFilePath, const char* pszFileName)
  31. {
  32. unzFile pFile = NULL;
  33. bool res = false;
  34. do
  35. {
  36. CC_BREAK_IF(!pszZipFilePath || !pszFileName);
  37. CC_BREAK_IF(strlen(pszZipFilePath) == 0);
  38. pFile = unzOpen(pszZipFilePath);
  39. int nRet = unzLocateFile(pFile, pszFileName, 1);
  40. res = UNZ_OK == nRet;
  41. while (0);
  42. if (pFile)
  43. {
  44. unzClose(pFile);
  45. }
  46. return res;
  47. }

最后在CCFileUtils.h 中声明两个函数的定义:

  1. static bool existFileData(const char* pszFileName);
  2. static bool existFileDataFromZip(const char* pszZipFilePath, const char* pszFileName);

3.3  最后记得设置缩放比例的值2.0,那么重新编译你的项目到Android运行则如下图所示:

OK,本篇就到这里,Himi最近感冒,还没吃晚饭,咳咳,先晚饭去了。。。北京最近下雨天气偏凉~大家多注意身体,

相关文章:

matlab图像处理命令(一)

转自:http://blog.csdn.net/langyuewu/archive/2009/05/02/4144120.aspx(非原处) 1.applylut 功能: 在二进制图像中利用lookup表进行边沿操作. 语法: A applylut(BW,lut) 举例 lut makelut(sum(x(:)) 4,2); BW1 imread(text.tif); BW2 applylut(BW1,lut); imsh…

MYSQL 查询数据排序数据和分组数据

在mysql查询过程中,可以对数据进行过滤,也可以对数据进行排序,可以对数据分组,下面分别讲述排序数据和分组数据例子。1,数据的排序 使用 ORDER BYselect * from where id10 order by id (正序,倒序)正序 AS…

Oracle RAC系列之:利用srvctl管理RAC数据库

srvctl即Server Control,是Oracle提供的一个命令行工具,用以用于管理Oracle的RAC环境。srvctl在Oracle 9i中被引入,Oracle10g、11g对其功能进行了很大的增强和改进。下面介绍下此命令的简单用法。 一、 查看实例状态(srvctl statu…

matlab图像处理命令(二)

转自:http://blog.163.com/crazyzcs126/blog/static/1297420502010229104452729/ (非原处) 图像增强 1. 直方图均衡化的 Matlab 实现 1.1 imhist 函数 功能:计算和显示图像的色彩直方图 格式:imhist(I,n) imhist(X,map) 说明&#x…

10万人的1000万张图像,微软悄然删除最大公开人脸数据集

作者 | 神经小姐姐转载自HyperAI超神经(ID:HyperAI)前几日,微软静悄悄地删除了一个公开的名人图片数据集。这个本为世界上最大的公开人脸识别数据集,现在已经不能通过微软的渠道访问。这个数据集包含了 10 万张名人面部…

密码学原理学习笔记

攻击的类型: 唯密文攻击(COA):攻击者只知道密文 已知明文攻击(KPA):攻击者知道同一密钥下密文对应的明文。 选择明文攻击(CPA):攻击者可以事先任意选择一定数量的明文,让被攻击的加密算法加密,并得到相应的密文。 选择…

终于申请博客了

今天终于下定决心在51CTO博客安家了。以后要坚持不断的写博客。以此来督促自己不断的学习和总结。把自己所掌握的技术和过往经验总结出来。转载于:https://blog.51cto.com/weijishui/971044

一种二维条码图像处理流程

目前,二维条码主要分两类: (1)、堆叠式二维条码:PDF417、Code 49; (2)、矩阵式二维条码:QR Code、Maxicode、Data Matrix。 本条码类似于Maxicode,处理过程大致为: (1)、图像灰度化&#xff…

vue中 静态文件引用注意事项

(一)assets文件夹与static文件夹的区别区别一:assets文件是src下的,所以最后运行时需要进行打包,而static文件不需要打包就直接放在最终的文件中了区别二:assets中的文件在vue中的template/style下用../这种…

百度AI快车道—企业深度学习实战营,推荐系统主题专场即将开课

身处信息过载的时代,在各大门户网站上,每天会有十万左右的新闻报道产出,京东淘宝等购物平台每小时就有上百万的商品上架出售,在B站、优酷、爱奇艺、搜狐等视频网站上每秒就有几百个小时的视频上线。所有人都正在经历一场信息变革。…

SIFT特征提取算法总结

转自:http://www.jellon.cn/index.php/archives/374 一、综述 Scale-invariant feature transform(简称SIFT)是一种图像特征提取与匹配算法。SIFT算法由David.G.Lowe于1999年提出,2004年完善总结,后来Y.Ke(2004)将其描述子部分用PCA代替直方…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构,MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型,我们可以从中获取很多有关网站架构方面的知识,看了之后你会发现你原来的想法很可能…

商汤科技举办病理、放疗两大MICCAI国际挑战赛,推动AI医疗落地

近日,商汤科技宣布将联合衡道病理、上海交通大学医学院附属瑞金医院、西京医院、上海市松江区中心医院举办MICCAI 2019消化道病理图像检测与分割国际挑战赛,联合医诺智能科技、浙江省肿瘤医院举办MICCAI 2019放疗规划自动结构勾画国际挑战赛,…

vue实战(1)——解决element-ui中upload组件使用多个时无法绑定对应的元素

解决element-ui中upload组件使用多个时无法绑定对应的元素 以前写的项目关于图片上传的都是单张或几张图片上传(主要是基于vue的element),图片路径都是固定写的,所以遇见过列表中多个上传图片的问题,先看下常用的形式 …

MVVM开发模式MVVM Light Toolkit中使用事件和参数传递

Light中定义了类GalaSoft.MvvmLight.Command.RelayCommand这个类继承了ICommand方法,实现了其中的方法,Action就是一个方法参数// 摘要: // A command whose sole purpose is to relay its functionality to other objects // by invoki…

harris角点检测与ncc匹配

转自:http://zixuanjinan.blog.163.com/blog/static/11543032620097510122831/ file1:-------------------------------------------------------------------------------------- function [y1,y2,r,c]harris(X)% 角点的检测,利用harris 算法% 输出的是…

CVPR 2019超全论文合集新鲜出炉!| 资源帖

整理 | 夕颜出品 | AI科技大本营(ID: rgznai100)实不相瞒,这是一个资源福利帖——CVPR 2019 接收论文超全合集!此前关于 CVPR 2019 论文和合集出过不少,但是这个可能是最全面最丰富的,链接奉上:…

ROS 用 roboware实现节点信息发送和接收

在ros下实现节点编程,实现一个节点发送消息,另一个节点接收。实现方式有多种,可以直接在命令窗口创建工作空间包以及节点,用catkin_make进行编译,添加.bash路径,然后执行rosrun package node_name 。这种…

javah生成JNI头文件

Administratoribm /cygdrive/z/workspace/com.example.hellojni.hellojni/src <---- 从此文件夹执行 javah *************** project root dir ******************* *** source dir *** javah -jni -classpath . com.example.hellojni.HelloJni*** package name *** ** c…

【码书】一本经典且内容全面算法书籍,学算法必备

之前推荐了好几本算法书&#xff0c;有《啊哈&#xff01;算法》&#xff0c;有《算法图解》&#xff0c;有《漫画算法》&#xff0c;也有《我的第一本算法书》&#xff0c;很多粉丝不乐意了&#xff0c;觉得我推荐了这么多算法书籍&#xff0c;竟然没有经典算法书籍《算法导论…

Ubuntu16.04.1 安装Nginx

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证…

linux下jboss的安装配置

闲来无事突然间想到和tomcat相同的java容器jboss&#xff0c;就想测试一下jboss和tomcat性能的差异之处。但是之前只安装过tomcat&#xff0c;想来跟tomcat安装方式应该是相同的都需要jdk的支持。查找资料后进行了安装。一下是我安装jboss的一些步骤&#xff1a;Linux版本&…

RANSAC鲁棒参数估计

转自&#xff1a;http://blog.csdn.net/zhanglei8893/archive/2010/01/23/5249470.aspx RANSAC 是"RANdom SAmple Consensus"的缩写。该算法是用于从一组观测数据中估计数学模型参数的迭代方法&#xff0c;由Fischler and Bolles在1981 提出&#xff0c;它是一种非确…

AlphaGo之父DeepMind再出神作,PrediNet原理详解

作者 | beyondma转载自CSDN博客近期&#xff0c;DeepMind发表论文&#xff0c;称受Marta Garnelo和 Murray Shanahan的论文“Reconciling deep learning with symbolic artificial intelligence: representing objects and relations”启发&#xff0c;他们提出了一种新的架构…

php中file_get_contents如何读取大容量文件

php中file_get_contents如何读取大容量文件 一、总结 一句话总结&#xff1a;使用file_get_contents()进行分段读取&#xff0c;file_get_contents()函数可以分段读取 1、读取大文件是&#xff0c;file_get_contents()函数为什么会发生错误&#xff1f; 发生内存溢出而打开错误…

Vmware虚拟机的复制后无法使用的问题和解决

为什么80%的码农都做不了架构师&#xff1f;>>> 我在自己的机器上用Vmware安装的Ubuntu 12.04系统&#xff0c;并在里面部署了Openstack的开发环境&#xff0c;部署的过程有些复杂&#xff0c;不希望再次重复这个过程&#xff0c;于是就复制整个的虚拟机文件到其他…

Facebook频谱图模型生成比尔·盖茨声音,性能完胜WaveNet、MAESTRO

作者 | James Vincent 等编译 | 夕颜、Monanfei出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;计算机生成语音领域&#xff0c;正在酝酿着和一场革命。Facebook 工程师们设计创建的机器学习模型 MelNet 就是一个启示。下面这段听起来怪异的话像极了比尔盖茨是吧&…

数据表设计的原则

如何设计数据表&#xff1a; 三个范式 ER图

图像配准----Harris算子

Harris算子是C.Harris和M.J.Stephens在1988年提出的一种特征点提取算子。它用一阶偏导来描述亮度变化&#xff0c;这种算子受信号处理中自相关函数的启发&#xff0c;给出与自相关函数相联系的矩阵M。M矩阵的特征值是自相关函数的一阶曲率&#xff0c;如果两个曲率值都高&#…

关于ORA-01950: no privileges on tablespace 的解决

前天晚上&#xff0c;本想在家里搭一个公司项目的开发环境&#xff0c;以便在工作忙的时候做点“家庭作业”。下班之前&#xff0c;通过PLSQL Developer导数据库时&#xff0c;不知道什么原因&#xff0c;以.dmp格式导出时总不成功&#xff0c;于是选择以.sql格式导出&#xff…