cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记

最进对android上的游戏有了点兴趣。于是非常热情的自学了一个多月。

先是学了AndEngine. 这是一款2D的游戏引擎.引擎很犀利,是通过标准的JAVA框架思想设计的. 不过AndEngine只能在Android OS上运行. 个人觉得,只会一种平台开发,前景不是很好.于是呼~ 又花了一个星期学习cocos2d-x引擎. cocos2d-x的效率很好,毕竟人家是用C++开发的游戏引擎.并且,cocos2d-x支持多种平台,从上面的宏定义就可以看出.基本的支持支持WIN32 , ANDROID,  IOS 等等.用途是很广泛的. 不过cocos2d-x 是用C++写的.对宏和对象的运用很犀利.

下面, 主要讲一下我自学cocos2d-x, 通过windows visual 2010 开发一个 cocos2d-x 版的 HelloWorld. 然后,通过使用eclipse 工具 加NDK插件,开发一个Android上的游戏的过程.


首先, 下载几个必须的工具:

1、windows visual 2010

2、eclipse indigo

3、android-ndk-r7c-windows

4、cocos2d-1.0.1-x-0.13.0-beta


具体思路是:

在Windows visual 2010 上编写游戏,并测试

在Eclipse indigo上通过NDK编译,最后安装到Android OS中


具体步骤是:

首先安装 visual 2010 ,并运行一个例子:

然后打开cocos2d-1.0.1-x-0.13.0-beta包, 里面有一个cocos2d-win32.vc2010.sln , 双击运行.

同时,你也可以通过手动点击cocos2d-x目录下的 template\msvc\InstallWizardForVS2010.js 文件安装cocos2d-x模板

经过以上步骤,如果没有错误,你就可以看到你的visual  2010中有一个cocos2d-win32.vc2010 解决方案了 如图1:


cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第1张图片



同时你也可以新建一个项目,并且可以看到如下情形:

cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第2张图片


此时,你已经可以运行一个cocos2d-x的win32版本的test了.

也许你可以自己写一个HelloWorld试跑一下.此处不在冗余.

假定你已经写了一个HelloWorld.像我一样.

通过生成 -> 调式 -> 生成新的实例 得到一下结果:


cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第3张图片


接下来,我们进行Android上的移植: (我做的是最简单的, 有什么错误,还望大家指出来)

打开Eclipse indigo : 新建一个Android工程. 命名为 MyCocos2DHelloWorld:  Android API LEVEL 7, 

包名: org.hello.activity, 这样就得到了一个Android下的项目.

接下来的动作很简单,由于目前没用到什么复杂的功能:

1、 将cocos2d目录下的tests\test.android\src 中的类,连同包名一起拷贝到MyCocos2DHelloWorld 项目中,

2、 将cocos2d目录下的tests\test.android\res\layout 中的布局内容考到MyCocos2DHelloWorld项目里的布局上:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <org.cocos2dx.lib.Cocos2dxEditText
        android:id="@+id/textField"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="@null"/>

    <org.cocos2dx.lib.Cocos2dxGLSurfaceView
        android:id="@+id/test_demo_gl_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

</FrameLayout>

将原来的覆盖掉.

AndroidManifest.xml 配置文件中添加一条Permission :

   <uses-permission android:name="android.permission.INTERNET" />

布局的相关信息需要上网.

修改一些小错误.完了以后.

将工程里的 org.cocos2dx.tests.TestsDemo 对象中的方法全部复制粘贴到自己的MyCocos2DHelloWorldActivity中:

MyCocos2DHelloWorldActivity 继承 Cocos2dxActivity;

连同包删掉org.cocos2dx.tests.TestsDemo;

这样JAVA层基本搞定了.


接下来,新建一个JNI文件夹,JNI里面,ndk-build工具通过查找 Android.mk文件编译相关的CPP文件

这里需要JNI的相关知识;如果JAVA要调用一个C++/C方法,就应该在项目的根目录下,建立一个文件夹名字叫jni

如图

cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第4张图片


在jni文件夹里面,新建两个文件,一个是:main.cpp , 另外一个是: Android.mk

main.cpp 中的内容是:

#include "Classes/AppDelegate.h"    //visual 2010 中的HELLOWORLD的AppDelegate.h文件
#include "cocos2d.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>

#define  LOG_TAG    "main"
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

using namespace cocos2d;

extern "C"
{

jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
    JniHelper::setJavaVM(vm);

    return JNI_VERSION_1_4;
}

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
{
    if (!cocos2d::CCDirector::sharedDirector()->getOpenGLView())
    {
        cocos2d::CCEGLView *view = &cocos2d::CCEGLView::sharedOpenGLView();
        view->setFrameWidthAndHeight(w, h);
        // if you want to run in WVGA with HVGA resource, set it
        // view->create(480, 320);
        cocos2d::CCDirector::sharedDirector()->setOpenGLView(view);

        AppDelegate *pAppDelegate = new AppDelegate();
        cocos2d::CCApplication::sharedApplication().run();
    }
    else
    {
        cocos2d::CCTextureCache::reloadAllTextures();
        cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
    }
}

}

Android.mk 中的内容是:  里面就不注释了,注释有时会有问题,我在前面将几个要紧的先讲清楚吧:

LOCAL_WHOLE_STATIC_LIBRARIES := cocos_hello_tests 中 cocos_hello_tests 是我自己的visual 2010 HelloWorld项目下根目录中 的Android.mk文件中定义的模块名,也就是说,你的 visual 2010中的 HelloWorld项目需要新建一个Android.mk文件,内容通过ndk docs文档编写.其模块名必须是cocos_hello_tests.

$(call import-module,HelloWorld) 中 HelloWorld 是我的visual 2010 项目名,也是我的文件夹的名字

其他的关键字,请查阅NDK中文件夹android-ndk-r7c\docs\下的文件 ANDROID-MK.html等.


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_hello_android
LOCAL_MODULE_FILENAME := libhello
LOCAL_SRC_FILES := main.cpp 
LOCAL_STATIC_LIBRARIES := curl_static_prebuilt

LOCAL_WHOLE_STATIC_LIBRARIES := cocos_hello_tests
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static

include $(BUILD_SHARED_LIBRARY)

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


这样以后,我们把visual 2010中的 Resources文件夹下的文件全部拷贝到MyCocos2DHelloWorld项目中的Assets文件夹中.有了这些,我们的工程已经完整了.

然后,右键点击工程. 选择Properties 找到Builders 那个选项

cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第5张图片



新建一个Program 如图:


cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第6张图片


Main选项卡中,Location :中填写你的NDK 目录下的 ndk-build.cmd文件

Working Directory:中选择当前要编译的项目.

cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第7张图片


Refresh选项卡中如图填写: 选择第5个Specific resources指定要编译哪个文件夹,就是我们的JNI文件夹咯.

cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第8张图片


再点击 Specify Resources  ,选择JNI文件夹,点击Finish


cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第9张图片


选择 Environment 中的 新建: 添加一个变量 NDK_MODULE_PATH : 值为 自己安装的COCOS2D根目录.


cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第10张图片


BUild Options 选项卡中: 按如图方式填写,该操作指定编译条件,同时指定编译的文件.



cocos2d-x NDK7r eclipse visual2010 HELLOWORLD 学习笔记_第11张图片


到此,步骤基本完成.还有什么遗漏的,还望各位指明.




你可能感兴趣的:(eclipse,android,jni,layout,2010)