cocos2dx java 调用lua_Cocos2d-x Lua实现从Android回调到Lua的方法
最近在研究怎么把積分墻嵌入到Cocos2d-x Lua的里,折騰了幾天,總算調通了,主要要解決的問題是,調用積分墻之后,當積分發生改變的時候,有一個回調方法,回調會返回用戶還剩下多少積分,當Android收到這個回調的時候,需要把這個通知給lua做對應的處理,我就是在這里卡住了。
先理一下思路要實現上面提到的回調通知lua,首先要實現Android回調給C++,再從C++去調用Lua的方法。
一步一步來,先看Android端的回調方法,當有積分變化的時候,onPointBalanceChange方法會被觸發:
onPointBalanceChange方法里用到了一個pointsBalanceChange()的方法,這個方法在下面被定義成了本地函數,通過本地函數,來調用C++的代碼
再看在C++的里的代碼:
先判斷是Android的情況下再進行下一步處理
然后寫一個方法,這個方法的方法名圖上已經有詳細說明了
void Java_org_cocos2dx_lua_AppActivity_pointsBalanceChange( JNIEnv *env,jobject thiz,jint point ){}
到現在為止,不出意外的話,編譯應該會通過,并且可以用真機運行調試,當Android里的積分變化回調方法被觸發的時候,對應到C++里的方法也會被觸發,并且輸出CCLog里的內容
如果這一步你調試通了,那就表示從Android到C++的調用調通了,接下來再看C++怎么調用lua,需要在剛才的基礎上添加一些配置:
1、先添加了:
//把LuaEngine include進來之后,下面會用到這個
#include "CCLuaEngine.h"
2、在Java_org_cocos2dx_lua_AppActivity_pointsBalanceChange方法里添加一大堆東西,我挨個解釋一下(有的我也不太明白,有錯誤請指正)
//這兩個我是沒太明白,大概意思是得到一個可以和lua連接的對象
auto engine = LuaEngine::getInstance()->getLuaStack();
lua_State *state = engine->getLuaState();
//通過這個方法去查找lua函數,并壓入棧底,pointsBalanceChange是在lua定義的一個function
lua_getglobal(state, "pointsBalanceChange");
//pointsBalanceChange需要接受一個參數,這里把Android得到的積分數據,傳入給這個function
engine->pushInt(point);
//調用pointsBalanceChange函數,第二個參數表示有多少參數,第三個表示有多少個返回值,第四個參數設置成0表示如果出錯了,直接輸出原始的錯誤信息,具體的沒太明白,后續在研究
lua_pcall(state, 1, 0, 0);
//調用完成后清棧,第二個參數為從堆棧中彈出的返回值,因為沒有返回值所以設置為0
lua_pop(state, 0);
到這里,C++的代碼都寫完了,接下來需要在lua下的main.lua里實現一個pointsBalanceChange方法,接受一個參數,在這個方法里輸出一下得到的point:
都完成了,這個時候編譯一下:
cocos compile -p android
不出意外是沒問題的,然后真機測試,當Android的回調函數被觸發的時候對應的Lua里的cclog日志也被輸出出來了:
總結
以上是生活随笔為你收集整理的cocos2dx java 调用lua_Cocos2d-x Lua实现从Android回调到Lua的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ai画面怎么调大小_ai如何调整对象大小
- 下一篇: gpio复用 海思_实现海思平台GPIO