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的堆疊和訪問方式有...