• 熱門專題

遊戲開發 小白學Lua(上)

作者|电影频道6:馬三小夥兒  發布日期||1999年彩票中奖号码:2016-11-14 20:24:04
Tag標簽|-张羽 央视:小白  
  •   在很多遊戲中|pk 3调试,腳本語言是不可或缺的一部分__北京燕都痤疮医院,很多遊戲都使用到了Lua,js,python一類的腳本|-|花样少女是多大,腳本語言可以在很多方麵給開發進程帶來幫助|||众博彩票网址多少。腳本語言可以作為初始化文件讀入變量和遊戲數據的一個快速而方便的方法-|_玉子金童。它們通常因為具有節省編譯時間提高生產效率__钟舒曼、提高創造性和拓展性的有點而受到眾多遊戲開發廠商的青睞_|闽江学院教务管理系统。在本篇博客中|-揭刘汉留下多少遗产,馬三將和大家一起學習一下Lua這門腳本語言---04400王中王开奖结果。

      一_-雅思口语考试时间、搭建Lua運行環境

      學習任何一門編程語言恐怕都是要先搭建起來它的開發環境_-_维护人员工具,這樣才能多寫代碼多練習||临江市邮编。Lua有一個交互的解釋程序(lua.exe)_-2011qq免费下载,你可以用它來驗證一些小的代碼片段|_姑苏晚报电子版,但是對於比較長和複雜的代碼--熊继柏在哪坐诊,最好是使用C/C++的Lua API來運行_-青岛米娜婚纱摄影,下麵的代碼就是從C/C++程序中運行一個Lua腳本所需的代碼塊|038彩票讨论群:

    extern 'C'
    {
        #include <Lua.h>
        #include <lualib.h>
        #include <lauxlib.h>
    }

      第一步要做的就是包含相關的頭文件-|-雨后池塘我的小屋,因為Lua是一個純C的庫|昆明湖歌词,所以必須顯式地讓編譯器知道這一點-|160彩票真的假的,不然就會遇到問題-|-lightroom3 6。通過將#include 和 extern 'C'一起使用就可以解決了__花枝是什么。

    //包含lua庫|||易记彩票。如果你的編譯器不支持這個指令的話--|色狗图片,那麼別忘了在你的項目設置中加入這些庫
    #pragma comment(lib,'lua.lib')
    #pragma comment(lib,'lualib.lib)
    #include <iostream>
    int main(){
        //創建一個lua state
        lua_State *pL=lua_open();
    }

      每一個運行的腳本文件都在一個動態分配的叫做lua_State的數據結構中運行-云顶至尊风水。Lua庫中的每一個函數的調用都需要把lua_State的指針作為一個參數傳遞給那個函數_易网彩票网开奖,因此在運行一個Lua腳本文件之前|西安网上订烟,必須通過lua_open來創建一個Lua State_-多多杀人游戏。

    //開啟lua中的標準庫
    lua_open_base(pL);
    luaopen_string(pL);
    luaopen_table(pL);
    luaopen_math(pL);
    luaopen_io(pL);

      Lua中有幾個標準庫|-姜宁转会费,它們提供了輸入輸出|--青年宫电影院影讯、算術計算_-娱乐天地官网下载、字符串操作等一係列的功能函數-_无毒刷q币软件。上麵的幾行代碼可以讓你在腳本裏調用這些庫命令_||商丘摄影网,就像C++#include響應的庫一樣||_红罂粟之生死之间。

      

    if(int error=lua_dofile(pL,'lua_script.lua') !=0 ){
        std::cout<<'error!'<<endl;
        return -1;
    }

      使用lua_dofile命令可以裝入|_短信超人图标怎么点亮、編譯__181彩票、運行Lua腳本_|-11选5提现多久能到账。如果運行的時候報錯了后来的歌词,那麼它會返回一個錯誤的代碼__-众赢彩票可靠吗。

      

      二|13458时时彩规律、Lua的變量|-_哈尔滨群力新区楼盘、類型___av女神、操作符和條件結構

      搭建好環境終於可以寫些Lua代碼練練手了_|_舞龙舞狮音乐。但是在這之前我們還是先來熟悉一下Lua的變量__银行职员张洁、類型_-永盛国际彩票靠谱么、操作符和條件結構(如果你之前有任何一門編程語言的基礎_|众购彩票导航,那麼這些內容學起來將會十分輕鬆)_|093彩票软件100。

      1.Lua變量

      Lua是一門動態語言__金枝玉叶玉琪,它和C++/Java不同_-博客大巴,變量是可以被賦予任何類型的值(這點和js,python等腳本一樣)||1288彩票是真的吗,比如-_众发彩票APP:

      

    --lua腳本開始啦_霍林河政府网!
    name='masanxiaohuoer'
    print('Name='..name);
    pi=3.1415926
    name=pi
    pi=false

      在Lua中_2018年电影,注釋通常是以“--”開始的||丽谯楼,如果要寫多行的注釋--美橙表业官网,可以這樣的結構_|-腾讯qq人工服务电话:--[[這是一段注釋內容]]-今日山东鸡蛋价格。在lua中|_-西班牙国家队2014最新名单,每句代碼後麵的分號可寫可不寫-||娱乐天地视频,但是當你的代碼跨行的時候分號是必不可少的_-地蛇八部。同時在lua中可以同時給多個變量賦予多個值|-金桥一景。

      

    a,b,c,d = 1,2,3,4

      如果左側的變量個數比右側的多的話-|_小轿车图片,那麼多餘出來的變量就會被賦予nil值-__众发娱乐跑路了吗,nil在lua中表示沒有意義|其乐船长,空值(類似於C++中的NULL)-|-物合网。如果右側的值多的話|-腾讯a股大赛2013,那麼多餘的值就會被丟棄掉了-__陈欣和。在Lua中|__106官网彩色版,有3中不同的變量_-|永盛娱乐平台怎么样?:global(全局)__-阜新华博网、local(局部)--陕西大专院校排名、table fields(表)-|-广东大专院校排名。如果一個變量沒有用local修飾的話__钛锗手链,那麼它默認就是global的|_|再向虎山行国语版。在一個變量被賦值之前-|诺基亚6120c游戏,它的值是nil_邮电局上班时间。

      2.Lua類型

      Lua中有以下的8種基本數據類型|_盈彩在线app:

      (1)Nil空

        nil和其他的類型都不同||雏牧香官网,她用來表示沒有意義|-浪翻云博客,空值-|-小米官网首页抢购红米。一旦給一個值賦予了nil-_|赢彩在线,它就消失了_--台湾身份证号码,好像從來沒有存在過一樣-|雅居公寓式酒店。

      (2)Number數值

        number類型用來表示浮點數_|_345彩票。在lua內部|--008彩票论坛ii,這個值被處理為double||青岛小海燕艺术学校。因此|_塔罗牌占卜大师 tlpnana,當傳遞number類型的變量給C/C++程序的時候|瑞丽裳电子杂志,要記得將它們映射成對應的正確類型||-云顶国际不给提现。  

      (3)String字符串

        string類型是字符串類型_宏基销售,你可以使用“..”來鏈接兩個字符串|_|昨夜裙带解。如果有一邊的類型不是string的話|09版qq下载,那麼它會被轉型為string類型_||偶像宣言目录,然後連接_248彩票。

      (4)Boolean布爾

        用來表示true或者false的值類型___多彩宝石图纸,0或者nil都是false-_-14场胜负彩开奖结果,其餘的為真-新闻发稿公司。

      (5)Function函數

        和C/C++不同-太原洗头房,在Lua中___优选彩票网,函數也是一種類型_-钟舒曼,也可以賦值給一個變量-|诺基亚5700主题。因此通過使用那個變量的名字_|-注册送彩票彩金大全,你就可以調用那個函數_-|歌曲相信自己。因為Lua是弱類型的語言|-安溪野山谷,參數列表和返回值都不需要指定類型-__众赢彩票手机官网。下麵是一個簡單的例子_|_nod32激活码网络之窗论坛,求兩個數之和|_|运城美食。在Lua中--固话资费,函數塊通過end關鍵字來結束-||娱乐天地点检官网。

      

    add=function(a,b)
    return a+b
    end

      如果你習慣用的是java或者C++一類的語言的話__帅猴手机维修论坛,可能會對這個語法感覺有點陌生_06新粤彩报图。Lua提供了另外一個定義一個函數的方式--_11选5无死角每期必中,這樣看起來更像C++/java了-_众彩彩票官方网站:

      

    function add(a,b)
        return a+b
    end

      和C++不同的是-极品公子混在校园,lua的函數可以一次返回多個變量苹果皮c皮官网,比如下麵這樣寫是完全沒有問題的_|极品公子混在校园:

      

    function Increse(a,b)
        return a+1,b+1
    end
    
    a=2,b=4;
    a,b=Increase(a,b)
    print(a,b)

      (5)Table表

        table是Lua中一種非常重要也非常強大的數據類型_||自制室外电视天线,你可以把表看成一種關聯數組或者哈希表---设备保修卡。這意味著你不但可以用整數來索引一個表|-重庆新闻联播主持人,也可以使用任何類型的鍵值來索引一個表_|虞城教育网,而且lua的表是混合類型的_-|张笑东后台,它們可以包含不同的數據類型|-_军用棉衣棉裤。

      

    --創建一個table
    my_table={}
    --添加一些數據到表中
    my_table[1]=2333
    my_table[2]=666
    my_table[3]='HelloWorld'
    
    --或者你也可以一次性的初始化一個表
    my_table={2333,666,'HelloWorld'}
    
    --關聯索引
    my_table['one']=2333
    my_table[6]='Study'
    
    --除了使用[]以外-_2019年第128期开奖,我們還可以使用.來存取一個值
    my_table.one =2333
    
    --函數也可以賦值給表
    function add(a,b)
        return a+b
    end
    my_table={}
    my_table['add']=add 
    print(my_table.add(2,3))

      (6)UserData用戶數據

        userdata類型允許Lua變量存儲定製的C/C++數據--助赢软件手机版有吗。一個userdata類型的變量不能在Lua中創建和修改_-斗战神怎么入定修炼,隻有通過C/C++接口才可以(下篇我們會介紹這種方法)__碧欧丽。

      (7)Thread線程

        通過這種類型||360龙将官网,我們可以產生並運行新的線程

      3.邏輯操作符

      Lua中有三種邏輯操作符||-2019年九龙必中肖,分別是-_|2013科幻电影排行榜:and,or,和not||-12315投诉彩票网站。他們和C++中的&&|||成都工商网上年检、||和--陈礼斌!很像|-安康龙舟赛,並且和C++一樣|_35彩票突然维护了,隻有在必要的情況下-|_动情迹忆,他們才會檢查第二個條件-珠海电大成绩查询。nil和false為假||北京卫视养生堂新浪博客,其他都為真--_观心者胡戈伦。

      4.條件結構

      Lua中提供了ifwhile epeat or幾種條件結構--_运盛娱乐app图片。lua的幾個版本的if和while控製結構和C++很類似-|许继慎,隻不過lua中條件不需要寫在小括號中-__亿彩下载。

      

    if a==4 then
        print('four')
    else 
        print('other')
    end
    
    --while循環
    while a<=100 then
        a=a+1
    end
    print(a)
    
    --while和if語句都已end關鍵字結束
    --repeat和until關鍵字一起聯用||_雄县地图,就像這樣_|芭比娃娃组合图片:
    repeat
        a=a+1
        print(a)
        until a==100
    
    --for結構有兩個版本||-海豚音是哪首歌,一個用於數字--苏州市公交线路图,一個用於表
    --用於數字的for循環的語法|--嵩县田三红:
    for var=low_value,high_value,step do
    xxxxxx
    end
    
    --舉例
    for a=10,20,2 do
    print(a)
    end

      和C/C++一樣|北交晨光bt,你也可以使用break來退出循環|_盈彩国际输钱怎么办。

      另外還有一種for循環用來遍曆表

    --語法
    for key,value in table do
    xxxxx
    end

      key和value分別代表鍵和值_仲博彩票手机客户端app,table就是我們要遍曆的表_36选7开奖历史好彩三。

      

    --舉例
    my_table={a=1,b=2,c=3}
    for k,v in my_table do
        print(k,v)
    end

      到現在--_臻怎么读,我們已經稍微對Lua有了一些了解|-亿彩彩票北京pk10规律,但是我們還不能用它來為我們的遊戲程序服務_|-众发彩票是违法网站吗。下篇我們將共同學習Lua和C/C++的接口_-大连开发区社保网,以及Lua如何應用在Cocos2d-X和Unity引擎中-__nba2k online外挂。

    作者|_苏打绿和she:馬三小夥兒
    出處_||有线通电话:http://www.cnblogs.com/msxh/p/6033679.html 
    請尊重別人的勞動成果_|重庆开县的 僵尸男孩,讓分享成為一種美德_||钱塘老娘舅2013直播,歡迎轉載--硫磺的产地。另外||cad2004破解版下载,文章在表述和代碼方麵如有不妥之處|_22彩票最新,歡迎批評指正-_-vc6 0安装教程。留下你的腳印__梨花女御多肉,歡迎評論-广州世界大观! 

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯係方式
本站內容來自於互聯網,僅供用於網絡技術學習,學習中請遵循相關法律法規
大地彩票v8彩票秒速时时彩秒速快3北京赛车pk10福德正神彩票

免责声明: 本站资料及图片来源互联网文章,本网不承担任何由内容信息所引起的争议和法律责任。所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!