导航:首页 > 编程语言 > cocos2d调用java

cocos2d调用java

发布时间:2022-06-08 06:15:00

java 在cocos2dx中需怎么引入

要完成在cocos2dx的场景上一个点击事件,传递一个消息到java层,下面让我们看看如何完成它。
包括
你需要在你的项目中添加以下引用,原作者已经建立了一个在线项目。请确保在你的项目中包含文件了c++和Java,这里有个链接你可以查看一下:EasyNDK
C++ 层面:
[cpp] view plain
#include "NDKHelper.h"

// 在cocos2dx中的按钮点击方法
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
//注册一个selector,那么当我们的native环境(java环境)调用这个字符串名字的函数(此处为名字为SampleSelector的函 数)的时候,这个selector可以响应请求
//注意:设置组名是为了在析构函数中能够清除掉selector
NDKHelper::AddSelector("HelloWorldSelectors",
"SampleSelector",
callfuncND_selector(HelloWorld::SampleSelector),
this);

// 为这个将要传递到native(也就是Java)语言中的消息设置参数
// 在c++中发送要调用的函数名
CCDictionary* prms = CCDictionary::create();
prms->setObject(CCString::create("SampleSelector"), "to_be_called");

// 最后在当前环境(c++)中调用native方法
SendMessageWithParams(string("SampleSelector"), prms);
}

// 一个回调选择器,native语言(java)将会调用它
void HelloWorld::SampleSelector(CCNode *sender, void *data)
{
CCLog("Called from native environment");
}

// 析构函数移除掉HelloWorldSelectors中的选择器(selectors)
HelloWorld::~HelloWorld()
{
// 移除相关联的选择器,因为我们将要销毁当前实例
NDKHelper::RemoveSelectorsInGroup("HelloWorldSelectors");
}

Java层面代码:

[cpp] view plain
/** 当activity第一次被创建调用*/
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

// 在主activity中,设置这个activity作为c++消息的接受者
androidNDKHelper.SetNDKReciever(this);
}

//实现这个被c++发送消息调用的方法
//确保这个方法的名字跟c++传递过来的字符串相同
// 比如我们从c++中传递"SampleSelector"字符串,这就是为什么我们创建这个方法的原因了
public void SampleSelector(JSONObject prms)
{
Log.v("SampleSelector", "传过来的参数是 : " + prms.toString());

String CPPFunctionToBeCalled = null;
try
{
CPPFunctionToBeCalled = prms.getString("to_be_called");
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("这是一个android层中的popup").
setTitle("Hello World!").
setNeutralButton("OK", null).show();

// 发送带参数的消息,仅仅当selector列表中有这个相同名字的函数,c++才会接受这些消息,
AndroidNDKHelper.SendMessageWithParameters(CPPFunctionToBeCalled, null);
}

为了跟其他JavaSDK相连接,比如微博SDK,FaceBook SDK等,你可以按照这些sdk的java指导说明,实现这些消息,并传递接口到cocos2dx层面调用,使之成为你自己的SDK。在cocos2dx中。我已经通过这种方法实现了APPCircle,Flurry和很多其他的SDK。

❷ cocos js 中 怎样插入 java 代码

在Cocos2d-js 3.0beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用java的静态方法。它的使用方法很简单:

1 var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)

在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。

类名

参数中的类名必须是包含Java包路径的完整类名,例如我们在org.cocos2dx.javascript这个包下面写了一个Test类:

123456789101112 package org.cocos2dx.javascript;public class Test { public static void hello(String msg){ Syste m.out.println(msg); } public static int sum(int a, int b){ return a + b; } public static int sum(int a){ return a + 2; }}

那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中我们习惯的点。

方法名

方法名很简单,就是方法本来的名字,例虎郸港肝蕃菲歌十攻姜如sum方法的名字就是sum。

方法签名

方法签名稍微有一点复杂,最简单的方法签名是()V,它表示一个没有参数没有返回值的方法。其他一些例子:

(I)V表示参数为一个int,没有返回值的方法;

(I)I表示参数为一个int,返回值为int的方法;

(IF)Z表示参数为一个int和一个float,返回值为boolean的方法;

现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。

❸ 如何在Android平台上使用JS直接调用Java方法

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法。它的使用方法很简单:
var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)

在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。
类名
参数中的类名必须是包含Java包路径的完整类名,例如我们在org.cocos2dx.javascript这个包下面写了一个Test类:
package org.cocos2dx.javascript;

public class Test {

public static void hello(String msg){
System.out.println(msg);
}

public static int sum(int a, int b){
return a + b;
}

public static int sum(int a){
return a + 2;
}

}

那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中我们习惯的点.。
方法名
方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。
方法签名
方法签名稍微有一点复杂,最简单的方法签名是()V,它表示一个没有参数没有返回值的方法。其他一些例子:
(I)V表示参数为一个int,没有返回值的方法
(I)I表示参数为一个int,返回值为int的方法
(IF)Z表示参数为一个int和一个float,返回值为boolean的方法
现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。
目前Cocos2d-js中支持的Java类型签名有下面4种:

Java类型
签名

int I
float F
boolean Z
String Ljava/lang/String;
参数
参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。
使用示例
我们将会调用上面的Test类中的静态方法:
//调用hello方法
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "hello", "(Ljava/lang/String;)V", "this is a message from js");

//调用第一个sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 3, 7);
cc.log(result); //10

//调用第二个sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(I)I", 3);
cc.log(result); //5

在你的控制台会有正确的输出的,这很简单吧。
注意
另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果我们在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。
例如,在下面的例子中我们会调用一个Java方法,它弹出一个android的Alert对话框。
//给我们熟悉的AppActivity类稍微加点东西
public class AppActivity extends Cocos2dxActivity {

private static AppActivity app = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = this;
}

public static void showAlertDialog(final String title,final String message) {

//这里一定要使用runOnUiThread
app.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog alertDialog = new AlertDialog.Builder(app).create();
alertDialog.setTitle(title);
alertDialog.setMessage(message);
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
});
}
}

然后我们在js中调用
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showAlertDialog", "(Ljava/lang/String;Ljava/lang/String;)V", "title", "hahahahha");

这样调用你就可以看到一个android原生的Alert对话框了。
再加点料
现在我们可以从js调用Java了,那么能不能反过来?当然可以!
在你的项目中包含Cocos2dxJavascriptJavaBridge,这个类有一个evalString方法可以执行js代码,它位于frameworks\js-bindings\bindings\manual\platform\android\java\src\org\cocos2dx\lib文件夹下。我们将会给刚才的Alert对话框增加一个按钮,并在它的响应中执行js。和上面的情况相反,这次执行js代码必须在gl线程中进行。
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//一定要在GL线程中执行
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString("cc.log(\"Javascript Java bridge!\")");
}
});
}
});

这样在点击OK按钮后,你应该可以在控制台看到正确的输出。evalString可以执行任何js代码,并且它可以访问到你在js代码中的对象。

❹ cocos2dx c++调用java时 类找不到

JNI(Java Native Interface):Java的本地调用。本文通过JNI在Cocos2d-x3.3RC0中完成Java与C++的互调。具体实现以下两个功能:(1)通过Android sdk的API得到应用程序的包名,并传递给C++层函数。(2)通过C++函数调用Android的Java层函数,显示一个对话框。点击按钮退出程序。

❺ cocos2d-x中怎么和java服务器交互

不能直接使用, for android的才可以,-x是可以使用C++已经可以和C++绑定的语言,比如JS,LUA,PYTHON等等,或者使用jni

❻ cocos2d-x 2.2.1 怎样配置jdk环境

下载cocos2d-x 3.0引擎

用户可以登陆cocos2d-x 官方网站下载最新版的cocos2d-x。点击导航栏的“Download”(下载)后你会看到如下下载页面:
在本指南中,将会以目前最新版本的cocos2d-x 3.beta2引擎为例。
(注意:如果你想要下载旧版的cocos2d-x,可点击“looking for an old versoin?”链接。但本人强烈推荐使用最新版本的cocos2d-x,新版引擎有很多新功能,修复了旧版的很多问题。)
右键单击“Download”链接选择“save link as…”(将链接保存为…),然后将压缩文件保存至适当的位置。本机保存位置为 D:\Cocos2d-x\cocos2d-x 3.beta2。
(注意:请不要将cocos2d-x文件夹放置c:\下,因为会导致很多优先级别(privilege)相关的问题。可尝试将该文件夹放到其他盘如D:\及E:\等等。)
打开 “D:\Cocos2d-x\cocos2d-x 3.beta2\build”目录,如下所示:

双击“cocos2d-win32.vs2012.sln”文件,然后会自动启动Visual Studio 2012/2013。
现在你便可以将HelloCpp项目当作默认启动项目来编译,按CTRL-F5运行样本程序。如果编译没有什么错误,同时运行成功的话,你会看到如下画面。
祝贺你!你已成功在Windows 7平台中运行cocos2d-x引擎。接下里介绍如何配置Android开发环境。
安装配置JAVA JDK

因为我们是针对Android开发,所以我们需要安装的第一个软件包绝对是JDK。如果你用的是64位的Windows 7,那应该下载以下版本软件64 bit JDK for windows 64bit,
下载完成之后,双击exe文件安装JDK,注意最好不要将其安装在有空格或者中文文件夹下,其他无限制,注意记下其安装路径,本机安装路径为:D:\Program Files\Java\jdk1.7.0_51\

配置环境变量:
新建环境变量:JAVA_HOME 值为:D:\Program Files\Java\jdk1.7.0

新建环境变量:CLASSPATH 值为:.;%JAVA_HOME%\lib;(注意:点号表示当前目录,不能省略)

在系统变量Path的值的前面加入以下内容:%JAVA_HOME%\bin;(注意:这里的分号不能省略)到这里,JDK安装完毕。
单击“开始”—>“运行”—>输入:cmd命令,在CMD窗口中输入:java -version

出现如下界面,就表示安装成功:
配置Android SDK环境

下载Android SDK下载之后解压,并将其放置于你要放置的目录下,在 “..\adt-bundle-windows-x86_64-20131030\eclipse” 文件夹中会有一个eclipse.exe程序,本机在桌面上创建了该程序的快捷方式。
现在就可以双击桌面的快捷方式启动Eclipse,同时会出现一个即时对话框,要求设置默认工作区(workspace)。选择“OK”接受默认设置即可。
配置环境变量:
新建环境变量:ANDROID_SDK 值为:D:\TDDownload\android\adt-bundle-windows-x86_64-20131030\sdk\platforms\;D:\TDDownload\android\adt-bundle-windows-x86_64-20131030\sdk\tools\;D:\TDDownload\android\adt-bundle-windows-x86_64-20131030\sdk\platform-tools(D:\TDDownload\android是SDK存放的位置)。
在系统变量Path的值的前面加入以下内容:%ANDROID_SDK%
单击“开始”—>“运行”—>输入:cmd命令,在CMD窗口中输入:adb -h 检验是否安装成功。
在“..\adt-bundle-windows-x86_64-20131030\sdk” 目录下有两个可执行程序,“AVD Manager.exe”和“SDK Manager.exe”,可直接通过它们创建管理AVD,SDK。
安装NDK

安装完Android SDK之后,还要安装“Android NDK”软件包,下载完成之后,解压,并将其放置到相应路径,本机路径为 D:\android-ndk-r9,设置另一个名为“NDK_ROOT”同时指向存放路径的环境变量。
Android NDK包含build、docs、samples、sources、GNUmakefile、ndk-build、ndk-gdb及readme等内容。
创建Cocos2d-x项目

将刚才下载的cocos2d-x-3.0beta2压缩包解压到你指定的文件夹里。

进入到目录 cocos2d-x-3.0beta2\tools\project-creator,打开终端运行**create_project.py**脚本创建文件,此版本项目创建脚本支持图形界面方式创建项目,执行以上脚本后会出现图形界面:
填写项目名称,包名称以及项目路径后选择开发语言,即可点击**create**按钮开始创建项目:
生成Android项目文件

在新建项目test项目中,执行proj.android下的*build_native.py*脚本进行编译。

等待它编译成功!
导入Android项目

最后便可启动Eclipse然后导入Android项目了。操作步骤如下:
右键点击“Package Explorer”并选择“Import…”
当出现对话框时,选择“Exsiting Android project into workspace”(将现有Android项目导入工作区)。
按照上面的方法导入到Eclipse里面。将您的手机设置成调试模式并用USB线连接到电脑, 在Eclipse中运行test, 然后就能在手机上看到已经运行的HelloWorld了!

❼ cocos2d-x可以用java代码开发吗

不能直接使用, for android的才可以,-x是可以使用C++已经可以和C++绑定的语言,比如JS,LUA,PYTHON等等或者使用jni。

❽ Cocos Creator 怎么用box2d和安卓怎么调java的支付接口

Cocos Creator 怎么用box2d和安卓怎么调java的支付接口
首先准备好arm-linux-gcc的包,比如说是arm-linux-gcc-fh.tar.gz。
首先是解压缩,路径可以随便放,最好放在/opt这个目录下面。
使用如下命令:
tar xvzf arm-linux-gcc-fh.tar.gz(空格)C(空格/(注意这之间的空格)。
然后就解压缩好了,接下来就是要修改一下配置文件了。
切换到root权限,输入如下命令:
vi /etc/bash.bashrc
在最后面一行加入如下语句:
export PATH=$PATH:/opt/***(***表示你的arm-linux-gcc这个可执行文件的路径);
最后,重启一下配置文件,使用如下命令:
source /etc/bash.bashrc,

❾ Cocos2d-js 怎样通过jni调用android的Java非静态函数

Cocos2d-x3.0

//a static method
Sprite* HelloWorld::maskedSpriteWithSprite(Sprite* textureSprite, Sprite* maskSprite)
{
// 1
RenderTexture * rt = RenderTexture::create( maskSprite->getContentSize().width,
maskSprite->getContentSize().height );

// 2
maskSprite->setPosition(maskSprite->getContentSize().width/2,
maskSprite->getContentSize().height/2);
textureSprite->setPosition(textureSprite->getContentSize().width/2,
textureSprite->getContentSize().height/2);

// 3
maskSprite->setBlendFunc( BlendFunc{GL_ONE, GL_ZERO} );
textureSprite->setBlendFunc( BlendFunc{GL_DST_ALPHA, GL_ZERO} );

// 4
rt->begin();
maskSprite->visit();
textureSprite->visit();
rt->end();

// 5
Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
retval->setFlippedY(true);
return retval;
}
..

❿ cocos2dx ccui.textfield 调用哪个java组建

两个代理方法 一个是点击return 缩回键盘
还有一个是对textField的输入进行监听
前提是需要对textField进行代理监听
//UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField;
{
//用户结束输入
[textField resignFirstResponder];

return YES;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange NSRange)range replacementString NSString*)string // return NO to not change text
{
//判断是否超过 ACCOUNT_MAX_CHARS 个字符,注意要判断当string.leng>0
//的情况才行,如果是删除的时候,string.length==0
int length = textField.text.length;
if (length >= ACCOUNT_MAX_CHARS && string.length >0)
{
return NO;
}

NSCharacterSet *cs;
cs = [[NSCharacterSet :kAlphaNum] invertedSet];
NSString *filtered =
[[string :cs] componentsJoinedByString:@""];
BOOL basic = [string isEqualToString:filtered];
return basic;
}

阅读全文

与cocos2d调用java相关的资料

热点内容
显示当前模式下所有可执行的命令 浏览:758
为什么程序员拿了股份还要高薪 浏览:946
电脑运行命令里的记录能删吗 浏览:697
linuxwss 浏览:848
一个软件需要登录服务器地址 浏览:923
哪里有解压程序 浏览:299
java静态方法内存 浏览:545
我的世界ec服务器如何带vip 浏览:737
什么是由解析器域名和服务器构成 浏览:414
自动识别电影信息源码 浏览:849
柱筋箍筋加密区怎么算 浏览:48
钢筋中加密15倍是什么意思 浏览:366
esc加密算法 浏览:518
linux运行exe命令 浏览:124
一级建造师管理pdf 浏览:720
如何更改服务器登录账号 浏览:317
看pdf文件软件 浏览:183
android恢复模式 浏览:808
生命令人忧 浏览:597
魔兽搬砖怎么选择服务器 浏览:771