加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d clipboard

发布时间:2020-12-14 16:38:21 所属栏目:百科 来源:网络整理
导读:需求:点击游戏面板中的按钮,将一个文本框中的字符串放入到剪贴板中。 平台:win32,android,ios等多个平台。 游戏是用cocos2d开发的。 第一次写cocos2d跨平台的东西,慢慢摸索着也差不多搞出来了--搞定了android平台,在此记录一下。 给外界提供一个接口:

需求:点击游戏面板中的按钮,将一个文本框中的字符串放入到剪贴板中。

平台:win32,android,ios等多个平台。

游戏是用cocos2d开发的。


第一次写cocos2d跨平台的东西,慢慢摸索着也差不多搞出来了--搞定了android平台,在此记录一下。

给外界提供一个接口:

virtual bool copyToClipboard(const std::string &content);


我将它放在了Application,这个类本来每个平台都有它的Application-*.h类。


1:win32平台实现

不用多说这个是最熟悉的了。

bool Application::copyToClipboard(const std::string &content)
{
	if (OpenClipboard(NULL))
	{
		EmptyClipboard();
		HGLOBAL clipbuffer;
		char* buffer;
		const char* str = content.c_str();
		const int length = strlen(str);
		clipbuffer = GlobalAlloc(GMEM_DDESHARE,length+1);
		buffer = (char*)GlobalLock(clipbuffer);
		strcpy(buffer,str);
		GlobalUnlock(clipbuffer);
		SetClipboardData(CF_TEXT,clipbuffer);
		CloseClipboard();
		return true;
	}
	return false;
}

2:android平台实现


bool Application::copyToClipboard(const std::string &content)
{
	return copyToClipboardJNI(content.c_str());
}

copyToClipboardJNI我放在了Java_org_cocos2dx_lib_Cocos2dxHelper中,这里就是去调用android操作剪贴板。中间者是JniHelper
<pre name="code" class="cpp">extern bool copyToClipboardJNI(const char* content){
	JniMethodInfo t;
	bool ret = false;
	if (JniHelper::getStaticMethodInfo(t,CLASS_NAME,"copyToClipboard","(Ljava/lang/String;)Z"))
	{
		jstring stringArg = t.env->NewStringUTF(content);
		ret = t.env->CallStaticBooleanMethod(t.classID,t.methodID,stringArg);
		t.env->DeleteLocalRef(t.classID);
		t.env->DeleteLocalRef(stringArg);
	}
	return ret;
}


 
 
 

接下来就是写java 代码了:java提供的接口放在了Cocos2dxHelper中。

 public static boolean copyToClipboard(String content){
    	clipboardmanager.setText(content);
    	System.out.println("come here");
    	return true;
    }

public static void init(final Activity activity) {
        if (!sInited) {
            final ApplicationInfo applicationInfo = activity.getApplicationInfo();
            
            Cocos2dxHelper.sCocos2dxHelperListener = (Cocos2dxHelperListener)activity;
                    
            Cocos2dxHelper.sPackageName = applicationInfo.packageName;
            if (CocosPlayClient.isEnabled() && !CocosPlayClient.isDemo()) {
                Cocos2dxHelper.sFileDirectory = CocosPlayClient.getGameRoot();
            }
            else {
                Cocos2dxHelper.sFileDirectory = activity.getFilesDir().getAbsolutePath();
            }
            
            Cocos2dxHelper.nativeSetApkPath(applicationInfo.sourceDir);
    
            Cocos2dxHelper.sCocos2dxAccelerometer = new Cocos2dxAccelerometer(activity);
            Cocos2dxHelper.sCocos2dMusic = new Cocos2dxMusic(activity);
            Cocos2dxHelper.sCocos2dSound = new Cocos2dxSound(activity);
            Cocos2dxHelper.sAssetManager = activity.getAssets();
            Cocos2dxHelper.nativeSetContext((Context)activity,Cocos2dxHelper.sAssetManager);
    
            clipboardmanager = (ClipboardManager)activity.getSystemService(Context.CLIPBOARD_SERVICE);//获取剪贴板服务
            Cocos2dxBitmap.setContext(activity);
            sActivity = activity;

            sInited = true;

        }
    }

在这里犯了个错误,Cocos2dxHelper找错了位置。一共有两个:




我们选择前者,要不然会找不到copyToClipboard方法的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读