❶ 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;
}