cocos2dx项目To安卓android平台 移植成功后记录一笔

经过一段时间的琢磨,终于搞定了cocos2dx到安卓平台的移植,现在把我成功的相关文件都贴下来,从一开始的环境看起~

首先是下载android的NDK,然后配置环境:

然后需要配置NDK_MODULE_PATH:

图片上没有显示完全,具体如下:NDK_MODULE_PATH=D:/cocos2d-x-2.1.5;D:/cocos2d-x-2.1.5/cocos2dx/platform/third_party/android/prebuilt

然后系统变量中的path配置里面,我配置了这两个:D:android-ndk-r9c;D:cygwinin

这是我的android项目结构视图:

我的Android.mk文件的配置如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp 
                   ../../Classes/AppDelegate.cpp 
                   ../../Classes/BackGroundLayer.cpp 
                   ../../Classes/Box2dController.cpp 
                   ../../Classes/Box2dView.cpp 
                   ../../Classes/CarSelectorLayer.cpp 
                   ../../Classes/GameMenuLayer.cpp 
                   ../../Classes/GameScene.cpp 
                   ../../Classes/GLESRender.cpp 
                   ../../Classes/LoadingLayer.cpp 
                   ../../Classes/MoreGameOverScene.cpp 
                   ../../Classes/MoreGameScene.cpp 
                   ../../Classes/PauseGameDialogLayer.cpp 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocos2dx)
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)

我的AndroidManifest.xml文件配置如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.cocos2dx.hellocpp"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8"/>
    <uses-feature android:glEsVersion="0x00020000" />

    <application android:label="@string/app_name"
        android:icon="@drawable/icon">

        <activity android:name=".HelloCpp"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <supports-screens android:largeScreens="true"
                      android:smallScreens="true"
                      android:anyDensity="true"
                      android:normalScreens="true"/>
                         
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest> 


vs下面的cpp文件视图:

需要注意的是:car.h这个文件我并没有在android.mk文件中配置它,因为他没有cpp文件,不过car.h在我的程序中是个很重要的代码~

网上有人说eclipse下面的一些配置,我就把那些看似关键的地方,实际上没有配置任何东西的地方贴出来:

下面这张图片,注意我画红线的地方,这里我们可以写个echo...我们可以现在cygwin中编译,然后在直接在eclipse里面运行就好了。

需要注意的地方。


如何编译build_native.sh文件,如下,可以用cygwin编译,觉得这样显得更cool一点,也可以直接用eclipse来编译

Cygwin下面正常编译的过程:

上面这些编译到底产生了什么东西呢,下面继续上图说明,我们可以在他编译的时候,看到我们的cocos2dx项目下面的目录(我下图红色标记)正在不断生成它编译的结果、

编译过程有点久。需要耐心等待,我也在耐心等待它编完截图。。。。。wait。。。。。

《既然它没有编完,我就说一个怎么让我们的游戏更好的适应屏幕的一句代码》

-----------------------插播时间------------------------------------------------------------------------------------------

bool AppDelegate::applicationDidFinishLaunching()
{
    // 初始化
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(800, 480, kResolutionNoBorder); //就是这句代码!!!

    pDirector->setDisplayStats(true);

    pDirector->setAnimationInterval(1.0 / 60);

    // 创建游戏开始的菜单GameMenu
    CCScene *pScene = GameMenuLayer::scene();

    pDirector->runWithScene(pScene);
    return true;
}

具体的大家可以去网上查查我标记的那句代码。

2.0版本提供了三种适配策略:
kResolutionNoBorder:超出屏幕的部分会被裁剪,两侧没有黑边,铺满屏幕,按图片原始比例显示,图片不变形。
kResolutionShowAll:整个游戏界面是可见的,会按原始比例进行缩放,图片不变形,但两侧可能会留有黑边,不铺满屏幕。
kResolutionExactFit:整个游戏界面是可见的,图片可能会进行拉伸或者压缩处理,铺满屏幕,图片会变形。

再贴一张我认为重要的图片:


-----------------------------------------------------插播结束-------------------------------------------------------------------------------------

继续刚刚的cygwin编译过程,我这里也编译完成了,(前提是你写的c++代码是可以被编译过去的,如果报错了,请注意看你的代码有没有报错哦)上图:

这个时候我们可以看到刚刚出炉的libs/armeabi/libcocos2dcpp.so文件了,这就是我们辛苦这么久的结晶T.T

然后apk吧,装到手机上运行起来,如果出现了无法打开,一定要注意读读logcat里面的内容,很大一部分是项目路径出现问题了,我就遇到过,调整了一下hellocpp.java文件的目录就好了,这个错误让我纠结很久。然后就有可能是你的资源文件读取失败的错误,比如你的资源文件是AAA.png,程序里你读取的文件名称可能是aaa.png。。。。然后就。。。。程序打不开了~~~~~

原文地址:https://www.cnblogs.com/vokie/p/3602067.html