锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩一区免费,亚洲在线免费,免费不卡视频http://m.shnenglu.com/wc250en007/category/14867.html鍓嶈繘鐨勮礬涓?/description>zh-cnFri, 16 Dec 2011 12:18:25 GMTFri, 16 Dec 2011 12:18:25 GMT60lua 涓璸airs 鍜?ipairs鍖哄埆http://m.shnenglu.com/wc250en007/archive/2011/12/16/162203.htmlLet me see seeLet me see seeFri, 16 Dec 2011 00:43:00 GMThttp://m.shnenglu.com/wc250en007/archive/2011/12/16/162203.htmlhttp://m.shnenglu.com/wc250en007/comments/162203.htmlhttp://m.shnenglu.com/wc250en007/archive/2011/12/16/162203.html#Feedback0http://m.shnenglu.com/wc250en007/comments/commentRss/162203.htmlhttp://m.shnenglu.com/wc250en007/services/trackbacks/162203.html

鏍囧噯搴撴彁渚涗簡闆嗕腑榪唬鍣紝鍖呮嫭榪唬鏂囦歡姣忚鐨?io.lines)錛岃凱浠able鍏冪礌鐨?pairs)錛岃凱浠f暟緇勫厓绱犵殑(ipairs)錛岃凱浠e瓧絎︿覆涓崟璇嶇殑 

(string.gmatch)絳夌瓑銆侺UA鎵嬪唽涓涓巔airs,ipairs瑙i噴濡備笅錛?br />

ipairs (t)

Returns three values: an iterator function, the table t, and 0, so that the construction

for i,v in ipairs(t) do body end

will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table.

 

 

 

 

pairs (t)

Returns three values: the next function, the table t, and nil, so that the construction

for k,v in pairs(t) do body end

will iterate over all key–value pairs of table t.

See function next for the caveats of modifying the table during its traversal.

 

榪欐牱灝卞彲浠ョ湅鍑? ipairs浠ュ強pairs 鐨勪笉鍚屻?/p>

 

pairs鍙互閬嶅巻琛ㄤ腑鎵鏈夌殑key錛屽茍涓旈櫎浜嗚凱浠e櫒鏈韓浠ュ強閬嶅巻琛ㄦ湰韜繕鍙互榪斿洖nil;

 

浣嗘槸ipairs鍒欎笉鑳借繑鍥瀗il,鍙兘榪斿洖鏁板瓧0錛屽鏋滈亣鍒皀il鍒欓鍑恒傚畠鍙兘閬嶅巻鍒拌〃涓嚭鐜扮殑絎竴涓笉鏄暣鏁扮殑key

 


涓嬮潰涓句釜渚嬪瓙鍚э紒

 

 eg錛?/p>

local tabFiles = {

[3] = "test2",

[6] = "test3",

[4] = "test1"

}

 

for k, v in ipairs(tabFiles) do

print(k, v)

end

 

 

鐚滄祴瀹冪殑杈撳嚭緇撴灉鏄粈涔堝憿錛?/p>

 

鏍規嵁鍒氭墠鐨勫垎鏋愶紝瀹冨湪 ipairs(tabFiles) 閬嶅巻涓紝褰搆ey=1鏃跺檝alue灝辨槸nil錛屾墍浠ョ洿鎺ヨ煩鍑哄驚鐜笉杈撳嚭浠諱綍鍊箋?/p>

 

>lua -e "io.stdout:setvbuf 'no'" "Test.lua"

>Exit code: 0

 

閭d箞錛屽鏋滄槸

for k, v in pairs(tabFiles) do

print(k, v)

end

鍒欎細杈撳嚭鎵鏈?錛?/div>
>lua -e "io.stdout:setvbuf 'no'" "Test.lua" 
3 test2
6 test3
4 test1
>Exit code: 0
鐜板湪鏀瑰彉涓涓嬭〃鍐呭錛?/div>
local tabFiles = {
[1] = "test1",
[6] = "test2",
[4] = "test3"
}
for k, v in ipairs(tabFiles) do
print(k, v)
end
鐜板湪鐨勮緭鍑虹粨鏋滄樉鑰屾槗瑙佸氨鏄痥ey=1鏃剁殑value鍊紅est1

 >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 

1 test1

>Exit code: 0 

--[紺轟緥1.]--
local tt 
=
{
    [
1= "test3",
    [
4= "test4",
    [
5= "test5"
}


for i,v in pairs(tt) do        -- 杈撳嚭 "test4" "test3" "test5"
    print( tt[i] )
end

for i,v in ipairs(tt) do    -- 杈撳嚭 "test3" k=2鏃舵柇寮
    print( tt[i] )
end





-- [[紺轟緥2.]] --
tbl 
= {"alpha""beta", [3= "uno", ["two"= "dos"}

for i,v in ipairs(tbl) do    --杈撳嚭鍓嶄笁涓?br />    print( tbl[i] )
end

for i,v in pairs(tbl) do    --鍏ㄩ儴杈撳嚭
    print( tbl[i] )
end






]]>lua5.1 緙栬瘧+瀹炰緥(杞?http://m.shnenglu.com/wc250en007/archive/2011/06/28/149637.htmlLet me see seeLet me see seeTue, 28 Jun 2011 02:06:00 GMThttp://m.shnenglu.com/wc250en007/archive/2011/06/28/149637.htmlhttp://m.shnenglu.com/wc250en007/comments/149637.htmlhttp://m.shnenglu.com/wc250en007/archive/2011/06/28/149637.html#Feedback0http://m.shnenglu.com/wc250en007/comments/commentRss/149637.htmlhttp://m.shnenglu.com/wc250en007/services/trackbacks/149637.html瀹樻柟鐨刉iki:http://lua-users.org/wiki/TutorialExamples
浠ヤ笅鏄叧浜巚s2005涓嬌鐢╨ua
    浠ヤ笅鏄垜鍦╲s2005涓紪璇戞柟娉曪細
    1:鎵撳紑vs鍛戒護琛屽伐鍏楓?  宸ュ叿->visual studio 2005 command prompt
    2:鍒發ua-5.1鐨勭洰褰曚篃灝辨槸etc鐨勪笂涓綰х洰褰?   錛歝d/d d:\lua-5.1
    3:鎵ц錛歟tc\luavs.bat(娉ㄦ剰錛氳繖閲屾槸\錛屼笉鏄?)
    4:鐒跺悗lua51.dll 錛宭ua51.lib錛宭ua.exe灝辯敓鎴愬湪src璺緞涓嬩簡~錛堟敞鎰忓洜涓烘槸lua5.1鐨勬墍浠ユ病鏈塴uac.exe,浠ュ墠鐨勭増鏈湁錛?/span>

  鍥犱負鍦╲s2005涓璴ua鏄鏉ョ殑錛屾墍浠ヨ璁﹙s2005鑳芥壘鍒發ua鐨勫ご鏂囦歡鍜屽簱鏂囦歡錛?/span>lua5.1涓彧鏈変竴涓猯ua51.lib錛夛紝鍦╲s涓寘鍚?/span>
浜庢槸:宸ュ叿->閫夐」->欏圭洰鍜岃В鍐蟲柟妗?>vc++ 鐩綍  鍙寵竟閫夋嫨鍖呭惈鏂囦歡鎶妔rc鐨勮礬寰勫寘鍚繘鏉ワ紙鍏充簬澶存枃浠剁殑錛?/span>
 榪樻湁搴撴枃浠跺悓鎰忕殑鎿嶄綔錛屼笉榪囪繖閲屽氨鏄悗鏉ヤ竴鐩村嚭閿欑殑鐐癸紝榪欓噷榪欑鏂瑰紡鍖呭惈鐨勫簱鏂囦歡鏄寘鍚笉榪涙潵鐨勶紝鍚庨潰璁插埌鐨勪竴縐嶆柟娉曞彲姝g‘鍖呭惈

     澶存枃浠跺拰搴撴枃浠墮兘鍖呭惈榪涙潵鍚庡氨鍙互鍦╟++涓嬌鐢╨ua浜?/span>
鐪嬩竴涓疄渚嬪涓嬶細
#include <stdio.h>
#include <iostream>
extern "C"
{
   #include "lua.h"
   #include "lualib.h"
   #include "lauxlib.h"
}//鍦ㄥ伐鍏蜂腑鍖呭惈鏂囦歡鐨勯偅涓獈~
/* Lua瑙i噴鍣ㄦ寚閽?*/
lua_State * L;
#pragma comment(lib,"lua51.lib")//鍖呭惈搴撴枃浠秪~鍦ㄥ伐鍏烽噷鍖呭惈涓嶈繘鏉ワ紝涓婇潰鐨勫寘鍚笉榪涙潵鐨勫鐞嗗姙娉曟槸錛?/span>
//鎶妉ua51.dll 鎷峰埌欏圭洰鐨刣ubug鐩綍涓嬶紝鎶妉ua51.lib鎷峰埌欏圭洰鐩綍鐨勯」鐩悕鐨勬枃浠跺す涓?/span>
int main ()
{
 /* 鍒濆鍖朙ua */
 L = lua_open();
 /* 杞藉叆Lua鍩烘湰搴?*/
 luaL_openlibs(L);
 /* 榪愯鑴氭湰 ,娉ㄦ剰璺緞*/
 luaL_dofile(L, "d:\\test.lua");
 /* 娓呴櫎Lua */
 lua_close(L);
 //printf( "Press enter to exit…" );
 //getchar();
 return 0;
}
 涓婇潰鏄痗++鐨勪竴涓┖宸ョ▼
涓嬮潰鏄痶est.lua鐨勪唬鐮侊細鏄竴涓煶澶村壀瀛愬竷鐨勫皬鐨勬父鎴忓疄渚?     
浠g爜濡備笅錛?/span>
---[[
math.randomseed(os.time()) --[[涓洪殢鏈烘暟浜х敓鍣ㄧ敓鎴愪竴涓瀛?-]]
user_score = 0
comp_score = 0  -- 鍏ㄥ眬鍙橀噺瀛樺垎鏁?/span>
lookup = {};     --杈撹耽瀵圭収琛?/span>
lookup["rock"]={rock = "draw",paper = "lose",scissors ="win"}
lookup["paper"]={rock = "win",paper = "draw",scissors = "lose"}
lookup["scissors"]={rock = "lose",paper = "win",scissors = "draw"}
function GetAiMove()  --Ai鐨勫嚱鏁?/span>
  local int_to_string = {"rock","paper","scissors"}  --灞閮ㄤ竴涓猼able錛屽鐓х敤
  return int_to_string[math.random(3)]
end
function EvaluateTheGuess(user_guess,comp_guess)   -- 璁$畻緇撴灉鐨勫嚱鏁?/span>
  if(lookup[user_guess][comp_guess]=="win") then
     print ("user win the game")
     --print()
     user_score=user_score+1         --灝忛敊璇?~宸叉敼
  elseif (lookup[user_guess][comp_guess]=="lose") then
     print ("user lose the game")
     --print()
     comp_score=comp_score+1
  else
      print ("draw!")
      --print()
  end
end
--涓嬮潰寮濮?/span>
print ("game begin:enter q to guit game")
--print() --鎹㈣錛?/span>
loop = true
while loop==true do
  --print()
  print("user: "..user_score.." comp: "..comp_score)
  print()
  print("p--甯? r--鎷沖ご  s--鍑?)
  print("璇瘋緭鍏ワ細")
  --io.open()
  user_guess =io.stdin:read '*l'    --鍑洪敊鐨勫湴鏂?榪欓噷鏄痩涓嶆槸1
  --user_guess = "r"
  print()
  local letter_to_string = {r="rock",s="scissors",p="paper"}    --浜︽槸灞閮ㄧ殑涓涓猼able 瀵圭収鐢ㄧ殑
  if(user_guess == "q") then
     loop = false
  elseif(user_guess == "r") or (user_guess == "s") or(user_guess =="p")  then
     comp_guess=GetAiMove()
     EvaluateTheGuess(letter_to_string[user_guess],comp_guess)
  else
     print ("invalid input,try again")
  end
end
--]] 



]]>
LUA鑴氭湰瀛︿範http://m.shnenglu.com/wc250en007/archive/2010/09/06/126030.htmlLet me see seeLet me see seeMon, 06 Sep 2010 10:18:00 GMThttp://m.shnenglu.com/wc250en007/archive/2010/09/06/126030.htmlhttp://m.shnenglu.com/wc250en007/comments/126030.htmlhttp://m.shnenglu.com/wc250en007/archive/2010/09/06/126030.html#Feedback0http://m.shnenglu.com/wc250en007/comments/commentRss/126030.htmlhttp://m.shnenglu.com/wc250en007/services/trackbacks/126030.html浠巐ua璋冪敤C++鍑芥暟鍜屽璞?br>    鍒╃敤LuaPlus鍙互鏂逛究鐨勪粠C++涓皟鐢╨ua鑴氭湰錛岀炕榪囦篃涓鏍楓傞氳繃娉ㄥ唽鍑芥暟鎴栫被瀵硅薄錛宭ua渚垮彲浠ヨ闂瓹++銆?
   
涓銆丆椋庢牸鍑芥暟娉ㄥ唽
    Lua鎻愪緵浜咰椋庢牸鐨勫洖璋冨嚱鏁版敞鍐岋紝璇ュ嚱鏁板師鍨嬪涓嬶細
    int Callback(LuaState* state);
   
    鏃犺鏄叏灞鍑芥暟銆佺被闈炶櫄鍑芥暟銆佺被铏氬嚱鏁幫紝鍙絎﹀悎涓婇潰鐨勫師鍨嬶紝閮藉彲浠ュ悜Lua娉ㄥ唽銆傛垜浠互鍏ㄥ眬鍑芥暟涓轟緥錛屼笅闈㈡槸鎴戜滑鎻愪緵鐨勪竴涓洖璋冨嚱鏁癈StyleAddFunc錛?/p>

int CStyleAddFunc(LuaState * state)
{    LuaStack args(state);
      if( args[1].IsNumber() && args[2].IsNumber() )
      {    state->PushNumber(args[1].GetInteger() + args[2].GetInteger());
           return 1;    
      }    
      return 0;
}


    鍦ㄥ洖璋冨嚱鏁頒腑錛屾垜浠氳繃鏍堟潵璁塊棶鍙傛暟錛屾爤涓彲浠ュ瓨璐涓弬鏁幫紝LuaStack args(state);璇彞鑾峰彇鏍堝璞′緵鍚庣畫璁塊棶銆?nbsp;    鎺ヤ笅鏉ュ垽鏂弬鏁版槸鍚︽槸鏁板瓧錛屽鏋滀袱涓弬鏁伴兘鏄暟瀛楋紝閭d箞榪涜鍔犳搷浣滐紝灝嗙粨鏋滃帇鍏ユ爤涓紝灝嗗帇鍏ユ爤涓殑鏁版嵁鐨勪釜鏁拌繑鍥炪傛敞鎰忥紝榪斿洖鍊間唬琛ㄥ帇鍏ユ爤涓殑鍏冪礌鐨勪釜鏁幫紝鑰屼笉鏄煇縐嶈綆楃粨鏋滄垨鍏跺畠鎰忎箟鐨勮繑鍥炲箋傞氳繃鏀瑰彉榪斿洖鍊兼潵鏌ョ湅紼嬪簭鐨勮緭鍑猴紝榪欐牱鍙互瀵硅繑鍥炲肩殑鍚箟鏈変釜鎰熸х殑浜嗚В銆?nbsp;    瑕佹敞鍐屽洖鍒板彧闇璋冪敤Register鍑芥暟鍗沖彲錛岃繖鍦ㄧ涓綃囦腑宸茬粡鐢ㄥ埌銆備笅闈㈡槸嫻嬭瘯鍑芥暟錛?/p>

void TestCFunctionCallBack()
{
   LuaStateOwner state;      //"print" need this
   state->OpenLibs();      //register my function CStyleAddFunc to Add
   state->GetGlobals().Register("Add", CStyleAddFunc);      //call my function and print the result  
   state->DoString("ret = Add(1,5);print(ret)");
}

   state->DoString("ret = Add(1,5); print(ret)");璇ュ彞鐢ㄦ潵浠庢墽琛孡ua鍛戒護涓層傛垜浠厛璋冪敤Add騫跺皢緇撴灉璧嬪肩粰ret鍙橀噺錛岀劧鍚庢墦鍗皉et鐨勫箋?main鍑芥暟濡備笅錛?

int _tmain(int argc, _TCHAR* argv[])
{   
   TestCFunctionCallBack();  
   return 0;
}

   緙栬瘧榪愯錛屼竴鍒嘜K銆?nbsp;    鎴戜滑涔熷彲浠ヤ粠Lua鑴氭湰鏂囦歡涓皟鐢ㄦ敞鍐岀殑鍥炶皟鍑芥暟錛岀涓綃囦腑鏈夋紨紺恒?nbsp;    瑕佹敞鍐岀被鐨勬垚鍛樺嚱鏁幫紝鍒欓渶瑕佽皟鐢≧egister鐨勫彟涓縐嶅艦寮廟egister( const char* funcName, const Callee& callee, int (Callee::*func)(LuaState*), int nupvalues = 0 );錛屾彁渚涚被瀹炰緥鎸囬拡鍜屽嚱鏁板嵆鍙畬鎴愭敞鍐屻備笅闈㈡槸紺轟緥浠g爜錛?/p>

class CTestCallBack
{
public:
   int NonVirtualFunc(LuaState *state)    
   {  
    LuaStack args(state);    
    printf("In non-virtual member function. no msg. ");   
    return 0;
   }   
  
   int virtual VirtualFunc(LuaState *state)   
   {
    LuaStack args(state);    
    printf("In virtual member function.msg=%s ", args[1].GetString());     
    return 0;
   }
};

void TestClassMemberFuncReg()
{   
   LuaStateOwner state;      //"print" need this   
   state->OpenLibs();  
   LuaObject globalobj = state->GetGlobals();
   CTestCallBack tcb;   
   globalobj.Register("MemberFunc", tcb, &CTestCallBack::NonVirtualFunc);   
   state->DoString("MemberFunc()");   
   globalobj.Register("VirMemberFunc", tcb, &CTestCallBack::VirtualFunc);   
   state->DoString("VirMemberFunc('Hi,myboy')");
}


淇敼涓涓媘ain鍑芥暟錛屽皢TestClassMemberFuncReg()鍔犺繘鍘誨氨鍙互鐪嬫晥鏋滀簡銆?/p>

 

浜屻佷換鎰忓艦寮廋++鍑芥暟娉ㄥ唽
    LuaPlus鎻愪緵浜?RegisterDirect() 鏉ョ洿鎺ユ敞鍐屼換鎰忓艦寮忕殑鍑芥暟錛岃繖鏍鋒洿涓虹洿鎺ワ紝涓嶅繀鍙楅檺浜庝笂榪扮殑鍑芥暟鍘熷瀷錛屼嬌鐢ㄨ搗鏉ュ緢鏂逛究銆傚悓鏍鋒鍑芥暟鍍廟egister涓鏍鳳紝鍙互娉ㄥ唽綾葷殑鎴愬憳鍑芥暟錛堜篃闇瑕佹樉紺烘寚瀹歵his鎸囬拡錛夈備笅闈㈡槸浠g爜:


float Add(float num1, float num2)
{    
return num1 + num2;
}

class CForRegDirect
{
public:
int Sum(int a, int b, int c)   
{
     return a+b+c;
}      //const is necessary
virtual void SeeMessage(const char *msg)    
{
     printf("msg=%s ", msg);
}
};

void TestRegisterDirect()
{
LuaStateOwner state;
state->OpenLibs();
LuaObject gobj = state->GetGlobals();        //register global function directly    
gobj.RegisterDirect("Add", Add);    
state->DoString("print(Add(1.5, 2.3))");      //register memberfunction    
CForRegDirect forobj;    
gobj.RegisterDirect("MemberSum", forobj, CForRegDirect::Sum);    
state->DoString("print(MemberSum(1,2,7))");     
gobj.RegisterDirect("VirCMsg", forobj, CForRegDirect::SeeMessage);    
state->DoString("print(VirCMsg('haha,Do you see me?'))");
}


涓夈佹敞鍐屽嚱瀛愬璞?br>    涓婇潰涓よ妭鐨勬柟寮忓彲浠ュ疄鐜扮畝鍗曠殑鍥炶皟娉ㄥ唽錛屾敞鍐岀被鐨勬垚鍛樺嚱鏁版椂闇瑕佹樉寮忔彁渚涚被鎸囬拡錛屼笉閫傚悎鐢ㄤ簬鏄犲皠C++涓殑綾葷粨鏋勩?nbsp;    RegisterObjectFunctor()鍜屽厓琛紙metatable錛夌粨鍚堬紝鎻愪緵浜嗕竴縐嶆柊鐨勬柟娉曘傛垜浠笉闇瑕佸湪娉ㄥ唽鍑芥暟鏃舵樉寮忕殑鎻愪緵this鎸囬拡錛屼綔涓烘浛浠o紝this鎸囬拡鍙互浠庤皟鐢ㄨ呯殑userdata鎴朹_object鎴愬憳鑾峰彇銆?nbsp;    鍏冭〃錛坢etatable錛夋槸涓涓櫘閫氱殑琛ㄥ璞★紝瀹冨畾涔変簡涓浜涘彲浠ヨ閲嶅啓鐨勬搷浣滐紝濡俛dd錛宻ub錛宮ul錛宨ndex錛宑all絳夛紝榪欎簺鎿嶄綔浠?__"寮澶達紝濡俖_add錛宊_index絳夈傚姞鍏ヤ綘閲嶅啓浜哶_add錛岄偅涔堝湪鎵цadd鎿嶄綔鏃跺氨浼氳皟鐢ㄤ綘鑷繁瀹氫箟鐨刜_add鎿嶄綔銆傝繖縐嶇壒鎬у彲浠ョ敤鏉ユā鎷烠++涓殑綾誨璞★紝娉ㄥ唽鍑藉瓙瀵硅薄姝f槸鍒╃敤浜嗚繖縐嶇壒鎬ф潵瀹炵幇鐨勩?nbsp;    涓嬮潰鎴戜滑灝嗕竴涓狢++綾繪槧灝勫埌Lua涓傜被浠g爜濡備笅錛?/p>


class CMultiObject
{
public:
   CMultiObject(int num) :m_num(num)
   {     }
  
   int Print(LuaState* state)
   {
    printf("%d ", m_num);
    return 0;
   }
protected:   
   int m_num;

};
void TestRegObjectDispatchFunctor()
{
   LuaStateOwner state;
   state->OpenLibs();      //create metaTable

   LuaObject metaTableObj = state->GetGlobals().CreateTable("MultiObjectMetaTable");
   metaTableObj.SetObject("__index", metaTableObj);     //register functor for multiobject
   metaTableObj.RegisterObjectFunctor("Print", CMultiObject::Print);      //get a instances of CMultiObject

   CMultiObject obj1(10);     //"clone" a object in lua, the lua object(here is table) has obj1's data
   LuaObject obj1Obj = state->BoxPointer(&obj1);     //set lua object's metatable to MetaTableObj  
   obj1Obj.SetMetaTable(metaTableObj);     //put lua object to Global scope, thus it can be accessed later.
   state->GetGlobals().SetObject("obj1", obj1Obj);   

   CMultiObject obj2(20);
   LuaObject obj2Obj = state->BoxPointer(&obj2);    
   obj2Obj.SetMetaTable(metaTableObj);
   state->GetGlobals().SetObject("obj2", obj2Obj);      //now call Print and Print2    
   state->DoString("obj1:Print();");
   state->DoString("obj2:Print();");
}

    棣栧厛鎴戜滑闇瑕佺敓鎴愪竴涓厓琛紙metatable錛夛紝灝咰++綾葷殑鎴愬憳鍑芥暟娉ㄥ唽鍒拌鍏冭〃涓傜劧鍚庝緷鎹瓹MultiObject鐨勫疄渚嬬敓鎴恖ua涓笌鍏跺搴旂殑瀵硅薄錛堜篃鏄〃錛夛紝灝嗚瀵硅薄鐨刴etatable錛堜篃鍗寵琛ㄧ殑__object鎴愬憳錛夎緗負涔嬪墠浜х敓鐨勫厓琛ㄣ傛渶鍚庡皢鏂扮敓鎴愮殑lua瀵硅薄鏀劇疆鍒板叏灞浣滅敤鍩熶腑錛岃繖鏍峰悗闈㈠氨鍙互鐩存帴寮曠敤榪欎簺瀵硅薄銆?nbsp;    鎴戜滑鍙互鍋氳繖鏍風殑榪戜技鐞嗚В錛氭瘡涓疄渚嬬殑鏁版嵁鍏冪礌瀛樻斁鍦ㄤ笌宸插搴旂殑lua table涓紝鑰岀被鐨勬垚鍛樺嚱鏁板垯瀛樻斁鍦╩etatable涓紙鍑藉瓙瀵硅薄錛夈傚綋璋冪敤obj1obj:Print()鏃訛紝浼氬厛鎵懼埌鍏秏etatable錛岀劧鍚庡湪metatable涓壘Print()鍑芥暟銆?nbsp;    榪欐牱渚垮疄鐜頒簡綾諱技C++涓殑綾葷粨鏋勩傛瘡涓疄渚嬫湁鑷繁鐨勬暟鎹紝鑰屾墍鏈夊疄渚嬪叡浜竴浠芥柟娉曞垪琛ㄣ?/span>         鍙﹀涓縐嶆柟寮忔槸鍒╃敤琛ㄧ殑userdata鏉ュ疄鐜幫紝闇瑕佸厛鍒涘緩涓涓猯ua琛ㄥ璞★紝鐒跺悗灝咰++瀵硅薄obj1璁劇疆涓鴻琛ㄧ殑userdata錛堜篃鏄緗叾__object鎴愬憳錛夛紝鍐嶅皢璇ヨ〃瀵硅薄鐨刴etatable璁劇疆涓烘垜浠箣鍓嶅垱寤虹殑鍏冭〃銆傛渶鍚庡氨鍙互鐢ㄨ〃鏄庢潵璋冪敤Print鍑芥暟銆備唬鐮佸涓嬶細
   
LuaObject table1Obj = state->GetGlobals().CreateTable("table1");
table1Obj.SetLightUserData("__object", &obj1);  
table1Obj.SetMetaTable(metaTableObj);   
LuaObject table2Obj = state->GetGlobals().CreateTable("table2");
table2Obj.SetLightUserData("__object", &obj2);  
table2Obj.SetMetaTable(metaTableObj);  
state->DoString("table1:Print()");
state->DoString("table2:Print()");

娉ㄥ唽鍑藉瓙瀵硅薄錛圧egisterObjectFunctor錛夎繖縐嶆柟寮忕殑闄愬埗鍦ㄤ簬錛氳娉ㄥ唽鐨勫嚱鏁板繀欏葷鍚堝師鍨嬶紙int Callback(LuaState* state);錛夈備負浜嗘墦鐮磋繖縐嶉檺鍒訛紝LuaPlus鎻愪緵浜嗗彟澶栦竴縐嶆柟寮忋?br>   
   
   
鍥涖佺洿鎺ユ敞鍐屽嚱瀛愬璞?/p>

    鐩存帴娉ㄥ唽鍑藉瓙瀵硅薄錛圧egisterObjectDirect錛夊拰RegisterDirect綾諱技錛屼笉鑰冭檻鍑芥暟鍘熷瀷錛屽彲浠ョ洿鎺ュ悜鍏冭〃娉ㄥ唽浠繪剰褰㈠紡鐨勫嚱鏁般?nbsp;    涓篊MultiObject娣誨姞鏂扮殑鎴愬憳鍑芥暟錛?br>   
void Print2(int num)  
{       
   printf("%d %d\n", m_num, num);  
}  

璋冪敤RegisterObjectDirect鏂規硶錛?
metaTableObj.RegisterObjectDirect("Print2", (CMultiObject*)0, &CMultiObject::Print2);

絎簩涓弬鏁?CMultiObject*)0鏈夌偣濂囨紝榪欐槸妯℃澘鍙傛暟鐨勯渶瑕併?
   
鏈鍚庯細  
state->DoString("obj1:Print2(5)");   
state->DoString("obj2:Print2(15)");  
state->DoString("table1:Print2(5)");    
state->DoString("table2:Print2(15)");

浜斻佹敞閿鍥炶皟

    娉ㄩ攢鍥炶皟鏄歡綆鍗曠殑浜嬫儏錛岃皟鐢⊿etNil("yourCallBack")鍗沖彲錛屽錛?
gobj.SetNil("Add");
metaTableObj.SetNil("Print2");

濂戒簡錛岃縿浠婁負姝㈡渶闀跨殑涓綃囷紝鐪嬬潃鍍忔槸LuaPlus鏂囨。鐨勭炕璇戯紙錛燂級錛屼笉榪囪繕鏄姞鍏ヤ簡涓浜涜嚜宸辯殑鐞嗚В銆傛枃妗f垜鐪嬩簡涓嬶紝鐞㈢(浜嗗崐澶╂墠鏄庣櫧銆傚笇鏈涜兘蹇偣灝哃uaPlus鐢ㄨ搗鏉ャ?
璧勬枡錛?nbsp;    錛?錛塋ua5.1鍙傝冩墜鍐?nbsp;    錛?錛塋ua鍏ラ棬wiki     錛?錛塋uaPlus.html錛屾簮鐮佸寘涓甫鐨勩?br>
杞澆鑷?a >http://hi.baidu.com/li9chuan/blog/item/e65e1d6dc0bd79f642169461.html

鍙傝冿細http://gpwiki.org/index.php/Scripting_with_LuaPlus_and_Cpp  綆鍗曠殑LUA鑴氭湰緙栧啓
            http://wwhiz.com/LuaPlus/LuaPlus.html
            http://m.shnenglu.com/iwangchuchu/default.html?page=2



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
寮曟搸涓殑綆鍗曞簲鐢細

void CAICharacterCore::LoadLuaScript( const char* LuaFileName )
{


    
try
    
{
     
//LuaScript->GetGlobals().RegisterDirect( "Thinking", *this, &CAICharacterCore::Thinking );

     
//////////////////////////////////////////////////////////////////////////

     LuaObject metaTableObj 
= m_LuaScript->GetGlobals().CreateTable("MultiObjectMetaTable");
     metaTableObj.SetObject(
"__index", metaTableObj);
     
//metaTableObj.RegisterObjectFunctor( "ClearMoveStep", &CAICharacterCore::ClearMoveStep );
     
//metaTableObj.RegisterObjectFunctor( "RestoreHPInstant", &CAICharacterCore::RestoreHPInstant );
     
//metaTableObj.RegisterObjectDirect( "SetSayTimeInterval", (CAICharacterCore*)0, &CAICharacterCore::SetSayTimeInterval );


     metaTableObj.RegisterObjectDirect( 
"LoseHPInstant", (CAICharacterCore*)0&CAICharacterCore::LoseHPInstant );
     metaTableObj.RegisterObjectDirect( 
"LoseMPInstant", (CAICharacterCore*)0&CAICharacterCore::LoseMPInstant );
     metaTableObj.RegisterObjectDirect( 
"RestoreHPInstant", (CAICharacterCore*)0&CAICharacterCore::RestoreHPInstant );
     metaTableObj.RegisterObjectDirect( 
"RestoreMPInstant", (CAICharacterCore*)0&CAICharacterCore::RestoreMPInstant );
     metaTableObj.RegisterObjectDirect( 
"GetHP", (CAICharacterCore*)0&CAICharacterCore::GetHP );
     metaTableObj.RegisterObjectDirect( 
"GetMP", (CAICharacterCore*)0&CAICharacterCore::GetMP );
     metaTableObj.RegisterObjectDirect( 
"GetHPMax", (CAICharacterCore*)0&CAICharacterCore::GetHPMax );
     metaTableObj.RegisterObjectDirect( 
"GetMPMax", (CAICharacterCore*)0&CAICharacterCore::GetMPMax );
     metaTableObj.RegisterObjectDirect( 
"UseSkill", (CAICharacterCore*)0&CAICharacterCore::UseSkill );
     metaTableObj.RegisterObjectDirect( 
"Say", (CAICharacterCore*)0&CAICharacterCore::Say );
     metaTableObj.RegisterObjectDirect( 
"SayAdvance", (CAICharacterCore*)0&CAICharacterCore::SayAdvance );
     metaTableObj.RegisterObjectDirect( 
"GetRand", (CAICharacterCore*)0&CAICharacterCore::GetRand );
     metaTableObj.RegisterObjectDirect( 
"GetLevel", (CAICharacterCore*)0&CAICharacterCore::GetLevel );
     metaTableObj.RegisterObjectDirect( 
"DropItemRand", (CAICharacterCore*)0&CAICharacterCore::DropItemRand );
     metaTableObj.RegisterObjectDirect( 
"AddTimer", (CAICharacterCore*)0&CAICharacterCore::AddTimer );
     metaTableObj.RegisterObjectDirect( 
"GetTimer", (CAICharacterCore*)0&CAICharacterCore::GetTimer );
     metaTableObj.RegisterObjectDirect( 
"GetTargetHP", (CAICharacterCore*)0&CAICharacterCore::GetTargetHP );
     metaTableObj.RegisterObjectDirect( 
"GetTargetMP", (CAICharacterCore*)0&CAICharacterCore::GetTargetMP );
     metaTableObj.RegisterObjectDirect( 
"GetTargetHPMax", (CAICharacterCore*)0&CAICharacterCore::GetTargetHPMax );
     metaTableObj.RegisterObjectDirect( 
"GetTargetMPMax", (CAICharacterCore*)0&CAICharacterCore::GetTargetMPMax );
     metaTableObj.RegisterObjectDirect( 
"GetTargetLevel", (CAICharacterCore*)0&CAICharacterCore::GetTargetLevel );
     metaTableObj.RegisterObjectDirect( 
"GetTargetEnmity", (CAICharacterCore*)0&CAICharacterCore::GetTargetEnmity );
     metaTableObj.RegisterObjectDirect( 
"SetTargetEnmity", (CAICharacterCore*)0&CAICharacterCore::SetTargetEnmity );
        metaTableObj.RegisterObjectDirect( 
"GetTargetDistance", (CAICharacterCore*)0&CAICharacterCore::GetTargetDistance );
        metaTableObj.RegisterObjectDirect( 
"SetArray", (CAICharacterCore*)0&CAICharacterCore::SetArray );
     metaTableObj.RegisterObjectDirect( 
"GetArray", (CAICharacterCore*)0&CAICharacterCore::GetArray );
     metaTableObj.RegisterObjectDirect( 
"SetBoolArray", (CAICharacterCore*)0&CAICharacterCore::SetBoolArray );
     metaTableObj.RegisterObjectDirect( 
"GetBoolArray", (CAICharacterCore*)0&CAICharacterCore::GetBoolArray );


     metaTableObj.RegisterObjectDirect( 
"SelfMurder", (CAICharacterCore*)0&CAICharacterCore::SelfMurder );

     
//metaTableObj.RegisterObjectDirect( "GetTargetName", (CAICharacterCore*)0, &CAICharacterCore::GetTargetName );

     LuaObject CAICharacterCoreObj 
= m_LuaScript->BoxPointer(this);

     CAICharacterCoreObj.SetMetaTable(metaTableObj);

     m_LuaScript
->GetGlobals().SetObject( "AI", CAICharacterCoreObj );

     
if!m_LuaScript->LoadFile( LuaFileName ) )
     
{
      m_bLuaScriptLoaded 
= true;
      m_LuaScript
->Call( 00 );
     }


     
//LuaStateOwner LuaScript;
     
//LuaScript->LoadFile( "D:/ArenWorkstation/XSanguoRun/Server/Script/AI/test.lua" );
     
//LuaObject luaFun = LuaScript->GetGlobal( "Event_OnInit" );

     
//if( luaFun.IsFunction() )
     
//{
     
// int y = 0;
     
//}

     
//m_LuaScript->DoString("print(obj1:ClearMoveStep())");
     
//LuaScript->LoadFile( "D:/ArenWorkstation/XSanguoRun/Server/test.lua" );
    }

    
catch (LuaPlus::LuaException &e)
    
{
        
char szErr[1024= {0};
        _snprintf(szErr, 
sizeof(szErr)-1"鎬墿 %s AI鑴氭湰杞藉叆閿欒錛?nbsp;%s", m_data.szCharacterName, e.GetErrorMessage());
        GetErrorLog()
->logString(szErr);
        m_bLuaScriptLoaded 
= false;
    }


}



]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲精品女人| 欧美顶级艳妇交换群宴| 国产精品久久久久久久久借妻 | 亚洲大片在线| 在线观看成人一级片| 黄网站免费久久| 亚洲国产经典视频| 亚洲国产一二三| 久久精品伊人| 久久免费黄色| 亚洲国语精品自产拍在线观看| 日韩视频在线播放| 久久精品一区二区| 久久久久一区二区三区| 亚洲国产精品久久久久秋霞蜜臀| 亚洲综合色在线| 夜夜嗨av一区二区三区中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 国产九九精品| 久久精品视频va| 久久精品国产77777蜜臀| 国内精品久久久久久久影视麻豆| 欧美与黑人午夜性猛交久久久| 亚洲一区二区三区色| 国产农村妇女毛片精品久久莱园子 | 欧美日韩成人| 久久久久久久尹人综合网亚洲 | 亚洲一区二区三区四区中文| 久久一区二区三区四区五区| 午夜在线精品偷拍| 久久精品中文字幕一区| 性欧美暴力猛交69hd| 久久久精品tv| 亚洲黄色免费电影| 最近中文字幕日韩精品| 亚洲图片在线观看| 欧美在线免费观看视频| 亚洲综合视频在线| 在线视频精品一区| 亚洲国产精品毛片| 亚洲国产日韩在线一区模特| 亚洲国产精品123| 久久精品夜色噜噜亚洲a∨ | 久久综合给合久久狠狠狠97色69| 欧美日本一道本在线视频| 国产精品久久久91| 一区二区国产在线观看| 欧美国产乱视频| 久久久久一区二区三区四区| 久久精品一二三| 亚洲福利电影| 欧美第一黄色网| 欧美中文在线免费| 欧美黄色精品| 午夜精品福利在线| 国产精品久久久久久久久久免费看| 亚洲欧洲三级| 欧美 日韩 国产在线| 欧美在线看片| 国内久久婷婷综合| 欧美在线999| 亚洲欧美日韩精品久久奇米色影视| 欧美视频在线观看免费网址| 亚洲午夜av在线| 一区二区三区日韩精品| 欧美偷拍一区二区| 欧美亚洲一区在线| 欧美一级片久久久久久久| 国产农村妇女精品一二区| 香蕉尹人综合在线观看| 亚洲欧美在线另类| 国内久久视频| 欧美国产日韩视频| 欧美日本亚洲韩国国产| 亚洲欧美日韩精品久久久| 亚洲一区在线直播| 精品999成人| 亚洲精品欧美专区| 国产欧美日韩专区发布| 久久久噜噜噜久久中文字免| 久久久一区二区| 亚洲精品欧美| 亚洲欧美精品在线观看| 国内成+人亚洲| 亚洲国产成人午夜在线一区| 日韩视频三区| 在线视频亚洲欧美| 国产精品―色哟哟| 久久亚洲欧美| 欧美激情中文字幕乱码免费| 在线午夜精品自拍| 亚洲欧美国产高清| 亚洲欧洲在线播放| 午夜精品久久久久影视 | 欧美丰满少妇xxxbbb| 欧美日韩精品系列| 久久久久久久久久久久久久一区 | 日韩网站在线| 国产日产亚洲精品| 91久久精品美女高潮| 国产精品成人va在线观看| 国产女主播一区| 嫩草成人www欧美| 国产精品成人免费| 欧美激情欧美激情在线五月| 国产精品成人一区二区三区夜夜夜 | 牛牛国产精品| 欧美一区高清| 欧美人妖另类| 麻豆国产精品一区二区三区| 欧美三区不卡| 欧美激情视频一区二区三区在线播放 | 亚洲一区二区三区中文字幕| 亚洲成色777777女色窝| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲视频导航| 亚洲精品三级| 久久亚洲视频| 久久久女女女女999久久| 欧美三级电影大全| 最新国产乱人伦偷精品免费网站| 国内综合精品午夜久久资源| 亚洲一级一区| 亚洲一区二区免费在线| 欧美久久久久久久| 亚洲激情综合| 欧美成人在线影院| 136国产福利精品导航| 午夜精品999| 性xx色xx综合久久久xx| 欧美日韩中文字幕日韩欧美| 亚洲韩国日本中文字幕| 亚洲韩国青草视频| 免费在线看一区| 亚洲二区视频在线| 亚洲国产成人午夜在线一区| 久久久国产成人精品| 欧美新色视频| 亚洲精品一区二区三区福利| 亚洲免费观看高清完整版在线观看| 久久综合给合| 亚洲盗摄视频| 日韩小视频在线观看| 欧美精品国产| 日韩视频一区二区在线观看 | 亚洲主播在线播放| 欧美日韩中文字幕在线视频| 亚洲美女在线视频| 亚洲一区二区三区精品在线| 欧美午夜不卡在线观看免费| 亚洲一区二区少妇| 久久乐国产精品| 亚洲激情av| 欧美日韩亚洲国产一区| 亚洲一区二三| 米奇777超碰欧美日韩亚洲| 亚洲黄色一区二区三区| 欧美欧美在线| 欧美一区二区三区免费视| 久久亚洲国产成人| 99热精品在线| 国产日韩欧美视频在线| 久久夜色精品国产| 日韩亚洲欧美成人一区| 欧美中文在线观看| 亚洲国产欧美日韩另类综合| 欧美午夜精品理论片a级按摩| 欧美一区二区三区播放老司机| 免费中文日韩| 午夜国产精品视频| 91久久中文字幕| 国产精品夜夜嗨| 欧美gay视频激情| 欧美一区二区黄| 一本色道久久88精品综合| 老鸭窝毛片一区二区三区| av成人福利| 伊人久久婷婷| 国产精品大全| 欧美xart系列高清| 午夜国产精品视频免费体验区| 亚洲高清在线观看一区| 久久国产日本精品| 亚洲素人一区二区| 亚洲国产精品尤物yw在线观看 | 欧美午夜影院| 免费视频一区| 欧美在线播放高清精品| 亚洲精品国产系列| 久久久久久亚洲精品杨幂换脸 | 欧美成年人网| 欧美亚洲系列| 亚洲一区二区3| 国产日韩欧美成人| 欧美日韩 国产精品| 久久精品五月| 午夜精品一区二区三区在线视 | 亚洲经典一区| 黄色亚洲在线| 国产精品视频一二三|