锘??xml version="1.0" encoding="utf-8" standalone="yes"?>成人精品一区二区久久,国产精品久久久福利,少妇被又大又粗又爽毛片久久黑人http://www.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://www.shnenglu.com/wc250en007/archive/2011/12/16/162203.htmlLet me see seeLet me see seeFri, 16 Dec 2011 00:43:00 GMThttp://www.shnenglu.com/wc250en007/archive/2011/12/16/162203.htmlhttp://www.shnenglu.com/wc250en007/comments/162203.htmlhttp://www.shnenglu.com/wc250en007/archive/2011/12/16/162203.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/162203.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/162203.html

鏍囧噯搴撴彁渚涗簡(jiǎn)闆嗕腑榪唬鍣紝鍖呮嫭榪唬鏂囦歡姣忚鐨?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浠ュ強(qiáng)pairs 鐨勪笉鍚屻?/p>

 

pairs鍙互閬嶅巻琛ㄤ腑鎵鏈夌殑key錛屽茍涓旈櫎浜?jiǎn)鑴P浠e櫒鏈韓浠ュ強(qiáng)閬嶅巻琛ㄦ湰韜繕鍙互榪斿洖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>

 

鏍規(guī)嵁鍒氭墠鐨勫垎鏋愶紝瀹冨湪 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

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

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

     澶存枃浠跺拰搴撴枃浠墮兘鍖呭惈榪涙潵鍚庡氨鍙互鍦╟++涓嬌鐢╨ua浜?/span>
鐪嬩竴涓疄渚嬪涓嬶細(xì)
#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鐨勪唬鐮侊細(xì)鏄竴涓煶澶村壀瀛愬竷鐨勫皬鐨勬父鎴忓疄渚?     
浠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("璇瘋緭鍏ワ細(xì)")
  --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鑴氭湰瀛︿範(fàn)http://www.shnenglu.com/wc250en007/archive/2010/09/06/126030.htmlLet me see seeLet me see seeMon, 06 Sep 2010 10:18:00 GMThttp://www.shnenglu.com/wc250en007/archive/2010/09/06/126030.htmlhttp://www.shnenglu.com/wc250en007/comments/126030.htmlhttp://www.shnenglu.com/wc250en007/archive/2010/09/06/126030.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/126030.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/126030.html浠巐ua璋冪敤C++鍑芥暟鍜屽璞?br>    鍒╃敤LuaPlus鍙互鏂逛究鐨勪粠C++涓皟鐢╨ua鑴氭湰錛岀炕榪囦篃涓鏍楓傞氳繃娉ㄥ唽鍑芥暟鎴栫被瀵硅薄錛宭ua渚垮彲浠ヨ闂瓹++銆?
   
涓銆丆椋庢牸鍑芥暟娉ㄥ唽
    Lua鎻愪緵浜?jiǎn)C椋庢牸鐨勫洖璋冨嚱鏁版敞鍐岋紝璇ュ嚱鏁板師鍨嬪涓嬶細(xì)
    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箞榪涜鍔犳搷浣滐紝灝嗙粨鏋滃帇鍏ユ爤涓紝灝嗗帇鍏ユ爤涓殑鏁版嵁鐨勪釜鏁拌繑鍥炪傛敞鎰忥紝榪斿洖鍊間唬琛ㄥ帇鍏ユ爤涓殑鍏冪礌鐨勪釜鏁幫紝鑰屼笉鏄煇縐嶈綆楃粨鏋滄垨鍏跺畠鎰忎箟鐨勮繑鍥炲箋傞氳繃鏀瑰彉榪斿洖鍊兼潵鏌ョ湅紼嬪簭鐨勮緭鍑猴紝榪欐牱鍙互瀵硅繑鍥炲肩殑鍚箟鏈変釜鎰熸х殑浜?jiǎn)瑙c?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鍛戒護(hù)涓層傛垜浠厛璋冪敤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()鍔犺繘鍘誨氨鍙互鐪嬫晥鏋滀簡(jiǎn)銆?/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錛夌粨鍚堬紝鎻愪緵浜?jiǎn)涓縐嶆柊鐨勬柟娉曘傛垜浠笉闇瑕佸湪娉ㄥ唽鍑芥暟鏃舵樉寮忕殑鎻愪緵this鎸囬拡錛屼綔涓烘浛浠o紝this鎸囬拡鍙互浠庤皟鐢ㄨ呯殑userdata鎴朹_object鎴愬憳鑾峰彇銆?nbsp;    鍏冭〃錛坢etatable錛夋槸涓涓櫘閫氱殑琛ㄥ璞★紝瀹冨畾涔変簡(jiǎn)涓浜涘彲浠ヨ閲嶅啓鐨勬搷浣滐紝濡俛dd錛宻ub錛宮ul錛宨ndex錛宑all絳夛紝榪欎簺鎿嶄綔浠?__"寮澶達(dá)紝濡俖_add錛宊_index絳夈傚姞鍏ヤ綘閲嶅啓浜?jiǎn)__add錛岄偅涔堝湪鎵цadd鎿嶄綔鏃跺氨浼?xì)璋冪敤浣犺嚜宸卞畾涔夌殑__add鎿嶄綔銆傝繖縐嶇壒鎬у彲浠ョ敤鏉ユā鎷烠++涓殑綾誨璞★紝娉ㄥ唽鍑藉瓙瀵硅薄姝f槸鍒╃敤浜?jiǎn)杩櫩U嶇壒鎬ф潵瀹炵幇鐨勩?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鎴愬憳錛夎緗負(fù)涔嬪墠浜х敓鐨勫厓琛ㄣ傛渶鍚庡皢鏂扮敓鎴愮殑lua瀵硅薄鏀劇疆鍒板叏灞浣滅敤鍩熶腑錛岃繖鏍峰悗闈㈠氨鍙互鐩存帴寮曠敤榪欎簺瀵硅薄銆?nbsp;    鎴戜滑鍙互鍋氳繖鏍風(fēng)殑榪戜技鐞嗚В錛氭瘡涓疄渚嬬殑鏁版嵁鍏冪礌瀛樻斁鍦ㄤ笌宸插搴旂殑lua table涓紝鑰岀被鐨勬垚鍛樺嚱鏁板垯瀛樻斁鍦╩etatable涓紙鍑藉瓙瀵硅薄錛夈傚綋璋冪敤obj1obj:Print()鏃訛紝浼?xì)鍏堟墤謭板叾metatable錛岀劧鍚庡湪metatable涓壘Print()鍑芥暟銆?nbsp;    榪欐牱渚垮疄鐜頒簡(jiǎn)綾諱技C++涓殑綾葷粨鏋勩傛瘡涓疄渚嬫湁鑷繁鐨勬暟鎹紝鑰屾墍鏈夊疄渚嬪叡浜竴浠芥柟娉曞垪琛ㄣ?/span>         鍙﹀涓縐嶆柟寮忔槸鍒╃敤琛ㄧ殑userdata鏉ュ疄鐜幫紝闇瑕佸厛鍒涘緩涓涓猯ua琛ㄥ璞★紝鐒跺悗灝咰++瀵硅薄obj1璁劇疆涓鴻琛ㄧ殑userdata錛堜篃鏄緗叾__object鎴愬憳錛夛紝鍐嶅皢璇ヨ〃瀵硅薄鐨刴etatable璁劇疆涓烘垜浠箣鍓嶅垱寤虹殑鍏冭〃銆傛渶鍚庡氨鍙互鐢ㄨ〃鏄庢潵璋冪敤Print鍑芥暟銆備唬鐮佸涓嬶細(xì)
   
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);錛夈備負(fù)浜?jiǎn)鎵撶牬杩櫩U嶉檺鍒訛紝LuaPlus鎻愪緵浜?jiǎn)鍙﹀涓縐嶆柟寮忋?br>   
   
   
鍥涖佺洿鎺ユ敞鍐屽嚱瀛愬璞?/p>

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

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

絎簩涓弬鏁?CMultiObject*)0鏈夌偣濂囨紝榪欐槸妯℃澘鍙傛暟鐨勯渶瑕併?
   
鏈鍚庯細(xì)  
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");

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

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



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
寮曟搸涓殑綆鍗曞簲鐢細(xì)

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;
    }


}



]]>
久久久噜噜噜久久| 97超级碰碰碰久久久久| 欧美伊人久久大香线蕉综合69| 久久久久国色AV免费看图片| 久久亚洲AV成人无码软件| 国产成人精品免费久久久久| 久久性生大片免费观看性| 人人狠狠综合久久88成人| 精品人妻伦一二三区久久| 久久精品国产精品亚洲精品 | 国产激情久久久久久熟女老人 | 97精品国产91久久久久久| 美女久久久久久| 日本福利片国产午夜久久| 久久精品国产色蜜蜜麻豆| 精品国产综合区久久久久久| 久久久久亚洲精品天堂| 亚洲国产香蕉人人爽成AV片久久| 国产一区二区三区久久精品| 亚洲精品午夜国产va久久| 亚洲国产成人久久精品动漫| 久久综合给合久久狠狠狠97色 | 偷偷做久久久久网站| 久久精品成人| 久久久久久久尹人综合网亚洲| 伊人久久久AV老熟妇色| 久久久青草青青国产亚洲免观| 国内精品久久久久| 999久久久免费精品国产| 性欧美大战久久久久久久久| 国内高清久久久久久| 久久久久久久久久久久久久| 青青草原综合久久大伊人导航| 91超碰碰碰碰久久久久久综合| 97久久精品无码一区二区| 久久久久精品国产亚洲AV无码| 色悠久久久久久久综合网| 欧美一级久久久久久久大| 久久久久亚洲av成人无码电影| 久久九九免费高清视频| 久久精品无码一区二区app|