Cocos2d x中Lua與C 通訊

2021-06-22 17:37:23 字數 3259 閱讀 3101

int   

lual_dofile

(lua_state *l, const char *filename)  :

載入並執行指定檔案,沒有錯誤返回0

void  lua_settop (lua_state *l, int index):

引數允許傳入任何可接受的索引以及 0 。 它將把堆疊的棧頂設為這個索引。 如果新的棧頂比原來的大,超出部分的新元素將被填為 nil 。 如果 index 為 0 ,把棧上所有元素移除。

void  lua_getglobal (lua_state *l, const char *name):

把全域性變數 name 裡的值壓入堆疊。

void   lua_pop (lua_state *l, int n):

從堆疊中彈出n個元素。相當於清除!

void   lua_pushstring (lua_state *l, const char *s):

把指標 s 指向的以零結尾的字串壓棧。 lua 對這個字串做一次記憶體拷貝(或是復用乙個拷貝), 因此 s 處的內存在函式返回後,可以釋放掉或是重用於其它用途。 字串中不能包含有零字元;第乙個碰到的零字元會認為是字串的結束。

更多的api請參考:

luatest.h的**:

#ifndef __lua_test_h__

#define __lua_test_h__

#include "cocos2d.h"

//引入lua庫,由於lua是用c語言實現的,所以需要新增extern "c"

extern_c

#include "ccluaengine.h"

class luatest

;#endif

luatest.cpp的**:

#include "luatest.h"

using_ns_cc;

/********* 獲取lua中的全域性字串 *********/

const char* luatest::getluastring(const char* script,const char* varname)

//lua中的全域性字串varname入棧

lua_getglobal(l,varname);

//判斷棧頂元素是否字串

if(lua_isstring(l,-1))

return null;

}/********* 獲取lua中全域性table的字串 *********/

const char* luatest::getluastring4table(const char* script,const char* table, const char* varname)

//對lua中的table執行壓棧

lua_getglobal(l,table);

//如果棧頂元素是乙個table

if(lua_istable(l,-1))

return null;

}/********* 列印lua中全域性table的元素 *********/

void luatest::printluatable(const char* script, const char* table)

//table入棧

lua_getglobal(l,table);

//獲取棧頂索引(該方法相當於獲取棧中元素的個數,因為棧的索引是從1開始往上公升的)

int top = lua_gettop(l);

//由於lua_next會先對棧執行一次彈出操作,然後再從table中獲取一對key-value入棧,所以先放乙個nil在棧頂

lua_pushnil(l);

if (lua_istable(l,top))

cclog("iterator is end..");

lua_pop(l,1);//key出棧 }}

/********* c++呼叫lua中的全域性函式 *********/

int luatest::callluaadd(const char* script, int a,int b)

} return null;

}/********* lua呼叫c++的靜態函式 *********/

void luatest::luacallcppfunctiontest()

int add(int a, int b)

/** c++靜態函式 **/

int luatest::cppadd(lua_state* l)

const char* luatest::getfullpath(const char* file)

test.lua的**:

--lua中的字串

luastr = "this is a string form lua"

luatable =

function add(a,b)

return a+b;

end

testcallcppfun.lua的**:

result = cppadd(1,1)

print("call c++ add function result = "..result)

luatest* lua = new luatest;

//獲取lua中的luastr字串

cclog("lua string = %s",lua->getluastring("script/test.lua","luastr"));

//獲取lua中table的字串

cclog("lua table string = %s",lua->getluastring4table("script/test.lua","luatable","name"));

//列印table中的元素

lua->printluatable("script/test.lua","luatable");

//呼叫lua中的add函式

lua->callluaadd("script/test.lua",1,1);

//lua呼叫c++中的函式

lua->luacallcppfunctiontest();

delete lua;

注意:

1.c++呼叫lua函式時,該lua函式必須是全域性的;

2.lua呼叫c++函式時,該c++函式必須是靜態的;

cocos2dx戰爭迷霧實現 lua

tilemap的美術資源 戰爭迷霧 戰爭迷霧的原理在網上已經有相關資料,就不補充了。戰爭迷霧用 t1中索引與tilemap的gid對應,右邊值 表 與tilemap的資源對應。p.t1 2 3 5 6 8 13 15 7 12 4 14 9 11 10 1 t2索引與t1的右邊的表的數字的和對應,值...

Cocos2d x手動繫結C 類到Lua

cocos2d x 3.0開始,lua binding使用tolua 方式自動繫結底層c 類到lua層,使使用者能夠用lua方式呼叫引擎各種介面。但是使用者還是希望手動繫結某些自定義類,所以接下來的內容將一步一步講解如何手動將自定義c 類繫結到lua。首先,定義乙個類foo,這個類就是接下來要繫結到...

Cocos2d x手動繫結C 類到Lua

最近開始學習cocos2d x中使用lua,而我的目標也只是顯示,部分邏輯,任務,劇情,新手引導使用lua,網路 資料等部分打算還是使用c 所以先看了看笨木頭介紹的簡單lua入門,在c 中呼叫lua函式,訪問lua的全域性變數以及表結構,在lua中呼叫c 函式。看完這些大概對lua的堆疊和訪問方式有...