青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Heath's Blog

There is no end, it is just the beginning! - A Game Developer's Notes

Some tips of using toLua

在使用toLua重構(gòu)腳本系統(tǒng)時(shí),遇到了一些問題,在此將其解決方案做一下備忘。

一、How to complie
    在linux下只需簡(jiǎn)單地執(zhí)行make即可。而在windows平臺(tái)下,情況會(huì)稍微復(fù)雜點(diǎn)。由于toLua的產(chǎn)出分為exe和lib,其中exe用于自動(dòng)產(chǎn)生bind代碼,lib作為腳本系統(tǒng)的連接庫(kù)使用。為了產(chǎn)生exe文件,需要?jiǎng)?chuàng)建一個(gè)win32 console工程,將src\lib和src\bin的.h、.c添加到這個(gè)工程中來(lái),然后編譯(當(dāng)然別忘了設(shè)置鏈接lua庫(kù));而產(chǎn)生lib,則需要?jiǎng)?chuàng)建static lib工程,然后將src\lib下的source添加進(jìn)來(lái)編譯(同樣別忘了設(shè)置鏈接lua庫(kù))。
二、How to use(How to transplant)
    在src\tests下有示例代碼,其中.pkg文件內(nèi)容與header file幾乎一致,只是多了toLua處理指令(以$開頭),其詳細(xì)說明可參考“tolua++ - Reference Manual”。為了避免將眾多的header files內(nèi)容復(fù)制到.pkg,我們使用了$cfile指令,這樣只需在每個(gè)需要導(dǎo)出到lua中的頭文件所對(duì)應(yīng)的.pkg文件中添加一條$cfile指令即可,但世上沒有免費(fèi)的午餐,這樣做有個(gè)前提:需要在頭文件中添加導(dǎo)出指示符(以注釋方式給出)。需要注意的是:1).pkg文件必須以一個(gè)新行結(jié)束文件;2)使用導(dǎo)出指示符時(shí),//tolua_export需位于類名繼承關(guān)系之后。對(duì)于導(dǎo)出單個(gè)或少數(shù)方法,需要在方法聲明前加//tolua_begin,結(jié)束加//tolua_end。對(duì)于如果//tolua_end不在類定義最后(即};之后)的情況,需在類定義最后加//tolua_export;3)如需在腳本中生成對(duì)象,則需導(dǎo)出構(gòu)造和析構(gòu)函數(shù)。下面舉具體例子加以說明:

//////////Test.h/////////////
#pragma once

class Hello 
{
public:
    Hello();
    
virtual ~Hello();
    
virtual void Say();
}
;

class HelloWorld : public Hello {//tolua_export
public:
    
//tolua_begin
    HelloWorld() {}
    
~HelloWorld() {}
    
//tolua_end
    void Say();
    
//tolua_begin
    void GG();
    
//tolua_end
}
;//tolua_export

/////////////Test.cpp////////////////

#include 
"Test.h"
#include 
<iostream>

using namespace std;

Hello::Hello()
{

}


Hello::
~Hello()
{

}


void Hello::Say()
{
    cout 
<< "Hello" << endl;
}


void HelloWorld::Say()
{
    cout 
<< "Hello, World!" << endl;
}


void HelloWorld::GG()
{
    cout 
<< "Go go!" << endl;
}

////////main.cpp////////

include 
"toLua.h"
#include 
"_Test.h"  /// generate by toLua

void main()
{
    
int tolua_Test_open(lua_State*);

    lua_State
* L = lua_open();
    luaL_openlibs(L);
    tolua_Test_open(L);

    luaL_dofile(L , 
"Test.Lua");

    lua_close(L);
}

//////////Test.lua/////////
print "Start"
local hw 
= HelloWorld:new()
hw:GG()
print "End"

//////Test.pkg//////
$cfile 
"Test.h"
<new line>


_Test.h和_Test.cpp是用ToLua -o _Test.cpp -H _Test.h Test.pkg命令產(chǎn)生的。


補(bǔ)充:針對(duì)在腳本中使用已經(jīng)創(chuàng)建好的C++對(duì)象,需要使用tolua_pushusertype和lua_setglobal。在上面例子中,如果只想在腳本中調(diào)用指定對(duì)象的GG方法,則只需用tolua_begin和tolua_end來(lái)包括GG(),然后修改main.cpp和腳本:

///////main.cpp//////

#include 
"toLua.h"
#include 
"_Test.h"

void main()
{
    
int tolua_Test_open(lua_State*);

    lua_State
* L = lua_open();
    luaL_openlibs(L);
    tolua_Test_open(L);
    HelloWorld
* pHelloWorld = new HelloWorld;
    tolua_pushusertype(L,(
void*)pHelloWorld,"HelloWorld");
    lua_setglobal(L , 
"HelloWorld");
    luaL_dofile(L , 
"Test.Lua");

    lua_close(L);
}

 

////////Test.lua////////

print 
"Start"
HelloWorld:GG()
print 
"End"


三、How to automatize

    Visual studio為每個(gè)工程提供了配置“Pre-Build Event”、“Pre-Link Event”以及“Post-Build Event”的機(jī)會(huì),她位于工程屬性的“Build Events”條目中。為了在每次編譯前,自動(dòng)產(chǎn)生lua綁定的相關(guān)代碼,可在“Command Line”中寫下我們?cè)诿钚兄休斎氲膖oLua命令。

posted on 2009-01-18 13:56 Heath 閱讀(2108) 評(píng)論(2)  編輯 收藏 引用 所屬分類: Script Programming

Feedback

# re: Some tips of using toLua[未登錄] 2009-01-21 19:25 ME

這媞青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  • <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>
              开元免费观看欧美电视剧网站| 在线 亚洲欧美在线综合一区| 久久综合中文| 国产精品高潮在线| 亚洲盗摄视频| 国产精品一区二区久久精品 | 亚洲午夜精品国产| 老妇喷水一区二区三区| 欧美一区二区三区四区夜夜大片| 欧美激情91| 欧美国产日韩视频| 极品尤物一区二区三区| 亚洲一区二区三区四区在线观看 | 亚洲天堂视频在线观看| 美女精品在线| 免费在线观看精品| 国内一区二区在线视频观看| 亚洲无玛一区| 午夜精品偷拍| 国产精品v日韩精品| 99精品国产一区二区青青牛奶| 亚洲激情自拍| 欧美国产高潮xxxx1819| 亚洲国产精品视频| 亚洲人www| 欧美日韩国产区一| 日韩视频不卡中文| 亚洲调教视频在线观看| 欧美午夜不卡| 亚洲欧美日韩国产成人精品影院| 亚洲一区二区精品在线| 国产精品久久久久久久久久久久久| 亚洲精品欧美日韩| 国产精品99久久久久久久久久久久 | 免费亚洲电影在线观看| 欧美大片va欧美在线播放| 1204国产成人精品视频| 欧美xx69| 一区二区三区四区五区精品视频| 亚洲制服av| 国产美女精品视频| 久久精品官网| 亚洲电影第1页| 亚洲一区二区三区涩| 国产精品―色哟哟| 久久久久久久久一区二区| 欧美黄色免费网站| 亚洲校园激情| 国产一区二区三区最好精华液| 久久久欧美一区二区| 亚洲激情在线观看视频免费| 亚洲一级片在线看| 国内精品久久久久影院优| 毛片一区二区| 亚洲香蕉成视频在线观看| 久久免费视频一区| 99riav久久精品riav| 国产精品婷婷午夜在线观看| 久久尤物视频| 一本色道久久99精品综合| 久久精品99国产精品日本| 亚洲激情另类| 欧美高清视频一区二区| 亚洲欧美另类国产| 亚洲第一黄色| 久久精品国产91精品亚洲| 亚洲国产另类 国产精品国产免费| 欧美日本在线看| 欧美在线免费一级片| 日韩香蕉视频| 久久久久这里只有精品| 亚洲精品国精品久久99热| 国产视频久久久久久久| 欧美国产精品专区| 久久国产精品网站| 亚洲无人区一区| 亚洲国产精品高清久久久| 欧美与欧洲交xxxx免费观看| 亚洲伦伦在线| 亚洲二区在线| 国产亚洲制服色| 欧美日韩一区在线观看视频| 老鸭窝毛片一区二区三区| 亚洲综合精品四区| 99国产精品| 亚洲国产精品传媒在线观看 | 极品中文字幕一区| 国产精品麻豆成人av电影艾秋| 欧美国产日本韩| 久久久久久9| 欧美呦呦网站| 亚洲欧美日韩国产一区二区三区| 亚洲国产欧美在线| 免费影视亚洲| 久久人人爽人人爽爽久久| 欧美亚洲视频在线观看| 亚洲天堂久久| 一区二区三区波多野结衣在线观看| 韩国女主播一区| 国产综合视频| 国产一区二区久久久| 国产一级揄自揄精品视频| 国产精品每日更新在线播放网址| 欧美日韩国产精品专区| 欧美精品1区2区| 欧美黄色小视频| 欧美精品久久一区| 欧美激情精品久久久久| 欧美国产一区视频在线观看| 老鸭窝91久久精品色噜噜导演| 久久久国产精品亚洲一区| 久久久久久久久久久久久女国产乱| 性欧美video另类hd性玩具| 香蕉成人啪国产精品视频综合网| 亚洲一线二线三线久久久| 亚洲一区自拍| 欧美一区=区| 久久天天狠狠| 欧美大片一区二区| 欧美日韩国产电影| 国产精品狼人久久影院观看方式| 国产精品久久久| 国产一区二区欧美日韩| 激情综合色综合久久| 亚洲国产高清一区| 艳妇臀荡乳欲伦亚洲一区| 一本色道88久久加勒比精品| 日韩一区二区福利| 亚洲欧美精品| 久久亚洲不卡| 亚洲黄页一区| 亚洲午夜一区| 久久九九免费视频| 欧美精品在线视频| 国产精品资源| 亚洲国产精品一区二区久| 99视频一区二区三区| 欧美一区成人| 欧美国产先锋| 亚洲性图久久| 久久亚洲捆绑美女| 欧美午夜精品电影| 好看的日韩视频| 亚洲视频免费看| 久久久久久日产精品| 亚洲欧洲精品一区二区三区不卡 | 欧美激情免费在线| 国产精品视频久久一区| 在线高清一区| 亚洲欧美日本视频在线观看| 媚黑女一区二区| 99国产一区二区三精品乱码| 性欧美大战久久久久久久久| 欧美激情精品久久久久久变态| 国产精品系列在线播放| 亚洲国产精品ⅴa在线观看| 亚洲欧美国产另类| 欧美激情一区二区三区成人| 亚洲免费在线精品一区| 欧美成人精品激情在线观看| 国产日产精品一区二区三区四区的观看方式| 黄色免费成人| 午夜国产一区| 亚洲精品裸体| 免费成人高清视频| 国产亚洲人成a一在线v站| 正在播放欧美视频| 欧美成在线视频| 久久国产日本精品| 国产精品入口福利| 在线亚洲一区二区| 亚洲高清不卡av| 久久久久国产免费免费| 国产精品一区二区欧美| 夜久久久久久| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品手机视频| 夜夜嗨av一区二区三区四区 | 亚洲国产精品123| 久久婷婷国产综合国色天香 | 国产精品户外野外| 一区二区三区四区五区精品| 亚洲二区在线视频| 久久久综合网站| 狠狠色伊人亚洲综合网站色| 久久精品国产精品亚洲精品| 亚洲一区免费网站| 国产精品美腿一区在线看| 亚洲一级高清| 亚洲午夜久久久久久久久电影院| 欧美日韩精品一区二区三区四区 | 一区二区三区日韩精品视频| 欧美日韩理论| 中文国产成人精品久久一| 亚洲精品免费网站| 欧美日韩午夜视频在线观看| 99国产一区| 99热这里只有精品8| 国产精品成人va在线观看| 亚洲专区免费|