lua_pushnumber(m_pstate, 11);
lua_pushnumber(m_pstate, 12);
int nin = lua_gettop(m_pstate); <–這裡加了一行, lua_gettop()這個api是告訴你目前棧裡元素的個數。
如果僅僅是push兩個引數,那麼nin的數值是2,對。沒錯。那麼咱們看看棧裡面是怎麼放的。我再加兩行**。
lua_pushnumber(m_pstate, 11);
lua_pushnumber(m_pstate, 12);
int nin = lua_gettop(m_pstate)
int ndata1 = lua_tonumber(m_pstate, 1); <–讀取棧底第乙個絕對座標中的元素
int ndata2 = lua_tonumber(m_pstate, 2); <–讀取棧底第二個絕對座標中的元素
printf(「[test]ndata1 = %d, ndata2 = %d./n」);
[test]ndata1 = 11, ndata2 = 12
lua_pushnumber(m_pstate, 11)
; lua_pushnumber(m_pstate, 12)
;int nin = lua_gettop(m_pstate)
int ndata1 = lua_tonumber(m_pstate, -1)
; <–讀取棧頂第乙個相對座標中的元素
int ndata2 = lua_tonumber(m_pstate, -2)
; <–讀取棧頂第二個相對座標中的元素
printf(「[test]ndata1 = %d, ndata2 = %d./n」)
;
[test]ndata1 = 12, ndata2 = 11
bool cluafn::callfilefn(const
char* pfunctionname, int nparam1, int nparam2)
lua_getglobal(m_pstate, pfunctionname);
lua_pushnumber(m_pstate, nparam1);
lua_pushnumber(m_pstate, nparam2);
int nin = lua_gettop(m_pstate); <–在這裡加一行。
nret = lua_pcall(m_pstate, 2, 1, 0);
if (nret != 0)
if (lua_isnumber(m_pstate, -1) == 1)
int nout = lua_gettop(m_pstate); <–在這裡加一行。
return
true;
}
lua_settop(m_pstate, -2)
;
bool cluafn::callfilefn(const
char* pfunctionname, int nparam1, int nparam2)
lua_getglobal(m_pstate, pfunctionname);
lua_pushnumber(m_pstate, nparam1);
lua_pushnumber(m_pstate, nparam2);
int nin = lua_gettop(m_pstate); <–在這裡加一行。
nret = lua_pcall(m_pstate, 2, 1, 0);
if (nret != 0)
if (lua_isnumber(m_pstate, -1) == 1)
int nout = lua_gettop(m_pstate); <–在這裡加一行。
lua_settop(m_pstate, -2); <–清除不用的棧。
return
true;
}
extern 「c」
;class cluafn
;
#ifndef _paramdata_h
#define _paramdata_h
#include
#define max_param_200 200
using
namespace
std;
struct _paramdata
; _paramdata(void* pparam, const
char* sztype, int ntypelen)
~_paramdata() {};
void
setparam
(void* pparam, const
char* sztype, int ntypelen)
; bool
setdata
(void* pparam, int nlen)
if(nlen > 0)
else
return
true;
}void* getparam
() const
char* gettype
() bool
comparetype
(const
char* ptype)
else
} };class cparamgroup
; ~cparamgroup()
;void
init();
void
close()
m_vecparamdata.clear();
};void
push
(_paramdata* pparam)
};_paramdata* getparam
(int nindex)
else
};int
getcount
()private:
typedef
vector
<_paramdata*> vecparamdata;
vecparamdata m_vecparamdata;
};#endif
#endif
bool cluafn::callfilefn(const
char* pfunctionname, cparamgroup& paramin, cparamgroup& paramout)
lua_getglobal(m_pstate, pfunctionname);
//載入輸入引數
for(i = 0; i < paramin.getcount(); i++)
nret = lua_pcall(m_pstate, paramin.getcount(), paramout.getcount(), 0);
if (nret != 0)
//獲得輸出引數
int npos = 0;
for(i = paramout.getcount() – 1; i >= 0; i–)
int ncount = lua_gettop(m_pstate);
lua_settop(m_pstate, -1-paramout.getcount());
return
true;
}
bool cluafn::pushluadata(lua_state* pstate, _paramdata* pparam)
if(pparam->comparetype(「string」))
if(pparam->comparetype(「int」))
else
}
bool cluafn:: popluadata(lua_state* pstate, _paramdata* pparam, int nindex)
if(pparam->comparetype(「string」))
return
true;
}if(pparam->comparetype(「int」))
return
true;
} else
}
如何用C 做遊戲 3
ifndef test h define test h class ctest endif char ctest getdata void ctest setdata const char pdata static inttolua new ctest lua state pstate static...
如何用區塊鏈技術做遊戲?
很多人或多或少都聽過區塊鏈遊戲,目前區塊鏈最火爆的遊戲莫過於fomo3d遊戲 賓果四神獸 寵物養成 以及虛擬遊戲和農場類遊戲,而各種區塊鏈遊戲紛紛爆出收入幾千萬的訊息,也讓許多人都為之側目,覺得不可思議。悄然之間,區塊鏈遊戲已經成為了整個遊戲行業的熱門話題,與此同時也有很多人在觀望。如何用區塊鏈技術...
如何用Redis做LRU Cache
lru least recently used 最近最少使用演算法是眾多置換演算法中的一種。redis中有乙個maxmemory概念,主要是為了將使用的記憶體限定在乙個固定的大小。redis用到的lru 演算法,是一種近似的lru演算法。上面已經說過maxmemory是為了限定redis最大記憶體使...