如何用C 做遊戲 2

2021-08-20 17:03:31 字數 4317 閱讀 2461

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最大記憶體使...