`
shuai1234
  • 浏览: 978120 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

【iOS-cocos2d-X 游戏开发之十六】配置你的Cocos2dx项目编译后的Android自动使用(-hd)高清图&设置Android自适应屏幕、缩放比例

 
阅读更多
 

 

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

          ☞ 点击订阅 ☜
 本博客最新动态!及时将最新博文通知您!

 

本篇主要介绍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
2
// if you want to run in WVGA with HVGA resource, set it
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void CCEGLView::create(int width, int height)
{
 
    if (width == 0 || height == 0)
    {
        return;
    }
 
    m_sSizeInPoint.width = width;
    m_sSizeInPoint.height = height;
 
    // calculate the factor and the rect of viewport
    m_fScreenScaleFactor =  MIN((float)m_sSizeInPixel.width / m_sSizeInPoint.width, (float)m_sSizeInPixel.height / m_sSizeInPoint.height);
    CCLOG("CCEGLView::Create / Screen Scale Factor = %f", m_fScreenScaleFactor);
    if (m_fScreenScaleFactor >= 1.5f)
    {
        CCLOG("CCEGLView::Create / HD Scale Factor => Increase Content Scale Factor");
        cocos2d::CCDirector::sharedDirector()->setContentScaleFactor(2.0f);
    }
    int viewPortW = (int)(m_sSizeInPoint.width * m_fScreenScaleFactor);
    int viewPortH = (int)(m_sSizeInPoint.height * m_fScreenScaleFactor);
    m_rcViewPort.origin.x = (m_sSizeInPixel.width - viewPortW) / 2;
    m_rcViewPort.origin.y = (m_sSizeInPixel.height - viewPortH) / 2;
    m_rcViewPort.size.width = viewPortW;
    m_rcViewPort.size.height = viewPortH;
 
    m_bNotHVGA = true;
}

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

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

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

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

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

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

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

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

 

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

分享到:
评论

相关推荐

    cocos2d-x_v3.16安装及环境变量配置文档

    cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...

    Cocos2d-x 3.x游戏开发实战源码

    这个“Cocos2d-x 3.x游戏开发实战源码”压缩包显然包含了使用Cocos2d-x 3.x版本进行游戏开发的实际项目代码,为学习者提供了实践经验。 一、Cocos2d-x框架详解 Cocos2d-x是基于C++的跨平台游戏引擎,支持iOS、...

    迷失航线-Cocos2d-x项目实战-射击类游戏-关东升

    Cocos2d-x是一个开源的游戏开发框架,它使用C++作为主要编程语言,同时支持Lua和JavaScript,广泛应用于2D游戏开发。在这个项目实战中,我们将深入探讨如何利用Cocos2d-x 3.2版本构建一款完整的射击游戏。 首先,...

    cocos2d-x 3.x 游戏开发实战光盘源码

    cocos2d-x是一款跨平台的2D游戏开发引擎,广泛应用于iOS、Android、Windows等多平台的游戏开发,尤其适合制作2D图形和动画丰富的游戏。其核心特性包括渲染引擎、物理引擎、粒子系统、音频处理、脚本支持等,为开发者...

    cocos2d-x-3.13.1 spine3.6.zip

    Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,同时支持Lua和JavaScript等多种脚本语言,为开发者提供了高效、跨平台的游戏开发解决方案。在3.13.1版本中,Cocos2d-x对Spine动画引擎的集成进行了更新,这...

    cocos2d-x+lua游戏demo源码

    cocos2d-x是一个跨平台的2D游戏开发框架,广泛应用于移动设备,如iOS和Android。lua是一种轻量级的、面向过程的编程语言,因其简洁和高效而被许多游戏开发者用作脚本语言,特别是在游戏逻辑和界面交互中。 在cocos...

    使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏

    cocos2d-x是一个开源的游戏开发框架,它基于C++,支持多平台,包括iOS、Android、Windows以及Mac OS等。在本项目中,开发者利用cocos2d-x 2.0.4版本创建了一个简单的益智类魔塔小游戏,旨在展示cocos2d-x在跨平台...

    cocos2d-x 3.x游戏开发实战肖文吉光盘源代码

    《cocos2d-x 3.x游戏开发实战》是一本深度探索Cocos2d-x 3.x框架的游戏开发书籍,作者肖文吉提供了配套的源代码,旨在帮助读者通过实践来掌握Cocos2d-x 3.x的核心技术和游戏开发流程。这本书的源代码是学习Cocos2d-x...

    cocos2d-x 跑酷源码

    在移动游戏开发领域,cocos2d-x是一款广受欢迎的开源2D游戏引擎,它基于C++,支持iOS、Android以及其他多种平台。本文将深入探讨如何利用cocos2d-x开发一款跑酷游戏,通过分析提供的“runningGame”源码,我们将揭示...

    cocos2d-x windows vs2010配置

    Cocos2d-x 是一个跨平台的游戏引擎,可以在多种平台上运行,包括 Windows、Mac OS X、iOS、Android 等。 一、下载和安装 Cocos2d-x 首先,需要下载最新版本的 Cocos2d-x。打开浏览器,输入 cocos2d-x.org,然后...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    精通COCOS2D-X游戏开发进阶卷

    《精通COCOS2D-X游戏开发进阶卷》是一本深入探讨Cocos2d-x游戏引擎的专业书籍,旨在帮助开发者提升在Cocos2d-x框架下的游戏制作技能。Cocos2d-x是一款广泛使用的开源游戏开发框架,它基于C++,同时也支持Lua和...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、Android、Windows、Mac等多个平台。它允许开发者使用一套代码,就可以在不同的操作系统上部署应用程序。 2. 实战++JS卷...

    Cocos2d-X游戏源码大合集.rar

    这个“Cocos2d-X游戏源码大合集.rar”文件显然包含了大约三十个使用Cocos2d-X开发的游戏实例源代码,对于学习和理解Cocos2d-X游戏开发的原理、技巧以及实践应用具有极大的价值。 1. **Cocos2d-X基础**: Cocos2d-X...

    cocos2d-x游戏源码

    Cocos2d-x是一款强大的开源游戏开发框架,主要用于构建2D游戏、演示程序和其他图形交互应用。它基于C++,同时提供了Lua和JavaScript的绑定,使得开发者可以选择自己熟悉的语言进行游戏开发。本资源是一个基于cocos2d...

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    cocos2d-x API中文文档

    这份API文档不仅提供了关于Cocos2d-x的基本信息,还深入到具体的技术细节,对于学习和使用cocos2d-x开发游戏的开发者来说,是非常宝贵的参考资料。通过这份文档,开发者可以了解如何利用cocos2d-x的API构建游戏场景...

    Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

    在游戏开发领域,资源管理是至关重要的,尤其是在移动端游戏如使用Cocos2d-x框架时。Cocos2d-x是一个跨平台的2D游戏引擎,支持多种操作系统,包括iOS、Android以及Windows等。为了保护游戏资源不被轻易篡改或盗用,...

    cocos2d-lua整合到ios工程

    在iOS应用开发中,有时需要将游戏或交互式内容集成到原生应用中,这时Cocos2d-x Lua引擎就显得非常有用。Cocos2d-x是一个强大的跨平台2D游戏开发框架,而Lua是一种轻量级的脚本语言,易于学习且适合游戏逻辑编写。...

Global site tag (gtag.js) - Google Analytics