本篇主要介绍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最近感冒,还没吃晚饭,咳咳,先晚饭去了。。。北京最近下雨天气偏凉~大家多注意身体,

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

  1. iOS cocos2d 2游戏开发实战(第3版)---你的第一个游戏!

    2019独角兽企业重金招聘Python工程师标准>>> 随着苹果公司不断地创新与发展,新的iPhone 5.iPad 4以及iPad mini产品相继问世,包括iOS与Xcode在内 ...

  2. iOS cocos2d 2游戏开发实战(第3版)

    <iOS cocos2d 2游戏开发实战(第3版)> 基本信息 原书名:Learn cocos2d 2: Game Development for iOS 作者: (美)Steffen I ...

  3. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  4. 【Visual C 】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  5. [原]【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  6. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  7. 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(上)

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html ☞ ...

  8. 添加类iOS cocos2d 2游戏开发实战(第3版)

    这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...

  9. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星 ...

最新文章

  1. 数据结构与算法:13 字符串与整数集合
  2. markdownpad 2 pro版本(注册码)
  3. 优秀大数据GitHub项目一览
  4. 深度解析JAVA动态代理设计模式
  5. 【网络安全】php代码审计-sql注入进阶篇
  6. react 合并数组_React快速上手
  7. Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境
  8. 数据从一个Oracle导到另一个,oracle拷贝数据导另一个用户
  9. 通过GeoIP获取ip所属地 (国家,城市,时区,邮编,经纬度等)
  10. json转为tfrecord格式文件怎么转_word怎么转换成pdf格式?这样转很方便
  11. 信息安全-移动应用安全需求分析与安全保护工程
  12. vue filters 国家区号json数据
  13. QT输出问题[zhaxok] Enter
  14. 【资料】wod旗帜,纹章
  15. 如何确认是文章发表在哪里?
  16. 记一次feign调用报错:feign.codec.DecodeException: Error while extracting response for type [java...
  17. 生活杂谈-简单电器维修知识
  18. html5 微网页 点餐_使用HTML5和微数据向网页添加电话号码
  19. matlab将图片旋转的代码_空间曲线绕空间直线旋转生成的旋转曲面方程
  20. notify()会立刻释放锁么?

热门文章

  1. jQuery--AJAX传递xml
  2. EXP6 信息搜集与漏洞扫描
  3. weex 阶段总结
  4. oracle initialization or shutdown in progress解决方法
  5. 写了个Python脚本监控nginx进程
  6. oracle删除大表的数据的方法
  7. unity镜像_通过镜像学习Unity Multiplayer Basics
  8. jpg在线合并jpg_JPG如何运作
  9. classlist使用方法_如何通过使用HTML5的classList API在没有jQuery的情况下操作类
  10. 0-1背包使用一维dp数组时为何v要从大到小枚举