cocos2d-x在android的接合简单记录

普通android工程入口:

src/org/cocos2dx/cpp_empty_test_diff/MainActivity.java

cocos2d-x入口稍微不同

src/org/cocos2dx/lib/Cocos2dxActivity.java

见 onLoadNativeLibraries 加载NDK编译生成的.so

这时候应用已经启动。

然后利用jni调用c++内容,启动游戏引擎。

具体是:

Cocos2dxActivity.java init -> onCreateView ->

new Cocos2dxGLSurfaceView(this)

Cocos2dxGLSurfaceView extends GLSurfaceView 类似 win32 的 事件回调函数,涉及键盘和touch等

Cocos2dxActivity.java init 中 this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());

Cocos2dxRenderer implements GLSurfaceView.Renderer

见 其中的 public void onDrawFrame(final GL10 gl) 函数,就是引擎的循环起点

不关心帧率处理,函数就是仅仅调用了 Cocos2dxRenderer.nativeRender();

回到 Cocos2dxActivity.java

private static native void nativeRender();

private static native void nativeInit(final int pWidth, final int pHeight);

这些函数是jni的知识,方法的实现在.so中

分别是:

Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp 中的void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender

javaactivity-android.cpp 中的 Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit

    JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender(JNIEnv* env) {
        cocos2d::Director::getInstance()->mainLoop();
    }

可以看到 mainLoop的调用;

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
{
        auto glview = director->getOpenGLView();
        glview = cocos2d::GLViewImpl::create("Android app");
        glview->setFrameSize(w, h); // frame size 的第一手资料
        director->setOpenGLView(glview);

        cocos2d::Application::getInstance()->run(); // 这里的run是空的

}

剩余的流程和 iOS的流程基本一致,请见“cocos2d-x在iOS的接合简单记录”;

对android不太熟悉,仅记录到此

时间: 2024-07-28 17:50:48

cocos2d-x在android的接合简单记录的相关文章

cocos2d-x在iOS的接合简单记录

对比app: 一个app的启动流程是: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, @"AppDelegate"); } } 对应 @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindo

Android查看联系人简单记录

简单实现打印联系人信息,可以作为插入联系人的基础和主要代码块,作为个人记录的小逻辑 1 package com.lgqrlchinese.contactstest; 2 3 import android.Manifest; 4 import android.content.pm.PackageManager; 5 import android.database.Cursor; 6 import android.net.Uri; 7 import android.provider.Contacts

Android 系统启动过程简单记录

本文记录Android系统启动过程,包含从linux kernerl到luancher启动完成的过程: 1.linux内核完成系统设置后,会在系统文件中寻找'init'文件,然后启动root进程或者说系统的第一个进程: 2.init进程是linux内核完成系统设置之后启动的第一个进程或者说root进程,它也是其他所有进程的父进程,其有两个作用,一个是挂载目录,比如/sys,/dev等,二是运行init.rc脚本或init.xxx.rc脚本: 3.Init.rc脚本是Android自己规定的初始化

cocos2d jsb 打包 Android APK

1.首先要会普通的cpp 打包成Android APK 以下所说的是在cocos2d-x 2.2.2 或者 2.3 版本中.本文在Eclipse总用ndk编译cocos2d-x. 老生常谈cocos2d-x JSB不是简单的js代码,涉及到C++代码,如果是Android的话又涉及到Java代码,有点复杂,如果搞过Android下的Jni的话会熟悉些.可以看下这篇文章:<Android Jni 例子 Hello JNI,ndk> Android为了提高开发者开发应用的速度,降低难度,选择了Ja

Android SQLite最简单demo实现(增删查改)

本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助. 参考博客:http://www.20864.com/201247/274.html 这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作. 以下是实现demo的步骤:

IDA 调试 Android 方法及简单的脱壳实现

IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) Android(5) 学习(9) 逆向(4) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 本文参考了一些网络文章,对大大们的技术分享表示感谢.小弟刚刚开始深入去搞Android的逆向不久,写一下学习笔记,希望能抛砖引玉,给新手同学们带来方便.文笔比较烂,这不重要,重要的是按自

Android开发---MediaPlayer简单音乐播放器

Android开发-MediaPlayer简单音乐播放器 功能介绍 实现一个简单的播放器,类似网易云音乐形式,功能包括: 播放.暂停,停止,退出功能: 后台播放功能: 进度条显示播放进度.拖动进度条改变进度功能: 播放时图片旋转,显示当前播放时间功能: 界面样式 功能实现 1. MediaPlayer的实现 MediaPlayer常用方法介绍 MediaPlayer的实现包括初始化MediaPlayer,MediaPlayer的功能实现,包括播放.暂停.停止.离开等,具体细节如下: MediaP

Android ExpandableListView的简单应用

Expandablelistview1Activity.java package com.wangzhu.demoexpandablelistview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widg

【原创】android——SQLite实现简单的注册登陆(已经美化)

1,Main_activity的xmL配置 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_pa