cocos2dx 中通过 jni 显示UI

来源:互联网 发布:hello kitty主题软件 编辑:程序博客网 时间:2024/05/21 21:43

cocos2dx开发中,经常用到第三方sdk。(如分享,广告等)。这些sdk一般用java实现,且自带UI。此文介绍如何通过jni实现这些ui的正常显示。

当用c++调用java时,jni会启动子线程,在子线程中调用java,而我们知道子线程是不能用来显示UI的。所以,若要ui正常显示,就得做一些处理。


jni的相关内容,这里就不提了,下面只说说java层如何实现。我们以对话框为例

步骤很简单

1、 创建一个static的Handler showDlgHandler 

2、 创建一个static的Runnable showDlgRunnable

3、 当c++调用java时,调用 showDlg.post(showDlg)

代码如下:

public class androidTF extends Cocos2dxActivity{
// 创建一个static的Handlerprivate static Handler showDlgHandler = new Handler();    protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);}    public Cocos2dxGLSurfaceView onCreateView() {    Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);    // androidTF should create stencil buffer    glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);        return glSurfaceView;    }    static {        System.loadLibrary("cocos2dcpp");    }             public static void showDlg(){showDlgHandler.post(showDlgRunnable);}        private static Runnable showDlgRunnable = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubconformOkCancle("titletest", "msgtest", "ok", "cancle");}};        private static void conformOkCancle(CharSequence title, CharSequence msg, CharSequence ok, CharSequence cancle){AlertDialog.Builder builder = new AlertDialog.Builder(Cocos2dxActivity.getContext());builder.setTitle(title);builder.setMessage(msg);builder.setCancelable(false);builder.setPositiveButton(ok, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdialog.dismiss();}});builder.setNegativeButton(cancle, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdialog.dismiss();}});AlertDialog dlg = builder.create();if(dlg != null){dlg.show();}}}



原创粉丝点击