日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【游戏开发】小白学Lua(上)

發(fā)布時(shí)間:2023/12/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【游戏开发】小白学Lua(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在很多游戲中,腳本語言是不可或缺的一部分,很多游戲都使用到了Lua,js,python一類的腳本,腳本語言可以在很多方面給開發(fā)進(jìn)程帶來幫助。腳本語言可以作為初始化文件讀入變量和游戲數(shù)據(jù)的一個(gè)快速而方便的方法。它們通常因?yàn)榫哂泄?jié)省編譯時(shí)間提高生產(chǎn)效率、提高創(chuàng)造性和拓展性的有點(diǎn)而受到眾多游戲開發(fā)廠商的青睞。在本篇博客中,馬三將和大家一起學(xué)習(xí)一下Lua這門腳本語言。

 一、搭建Lua運(yùn)行環(huán)境

  學(xué)習(xí)任何一門編程語言恐怕都是要先搭建起來它的開發(fā)環(huán)境,這樣才能多寫代碼多練習(xí)。Lua有一個(gè)交互的解釋程序(lua.exe),你可以用它來驗(yàn)證一些小的代碼片段,但是對(duì)于比較長(zhǎng)和復(fù)雜的代碼,最好是使用C/C++的Lua API來運(yùn)行,下面的代碼就是從C/C++程序中運(yùn)行一個(gè)Lua腳本所需的代碼塊:

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

  第一步要做的就是包含相關(guān)的頭文件,因?yàn)長(zhǎng)ua是一個(gè)純C的庫,所以必須顯式地讓編譯器知道這一點(diǎn),不然就會(huì)遇到問題。通過將#include 和 extern "C"一起使用就可以解決了。

//包含lua庫。如果你的編譯器不支持這個(gè)指令的話,那么別忘了在你的項(xiàng)目設(shè)置中加入這些庫 #pragma comment(lib,"lua.lib") #pragma comment(lib,"lualib.lib) #include <iostream> int main(){//創(chuàng)建一個(gè)lua statelua_State *pL=lua_open(); }

  每一個(gè)運(yùn)行的腳本文件都在一個(gè)動(dòng)態(tài)分配的叫做lua_State的數(shù)據(jù)結(jié)構(gòu)中運(yùn)行。Lua庫中的每一個(gè)函數(shù)的調(diào)用都需要把lua_State的指針作為一個(gè)參數(shù)傳遞給那個(gè)函數(shù),因此在運(yùn)行一個(gè)Lua腳本文件之前,必須通過lua_open來創(chuàng)建一個(gè)Lua State。

//開啟lua中的標(biāo)準(zhǔn)庫 lua_open_base(pL); luaopen_string(pL); luaopen_table(pL); luaopen_math(pL); luaopen_io(pL);

  Lua中有幾個(gè)標(biāo)準(zhǔn)庫,它們提供了輸入輸出、算術(shù)計(jì)算、字符串操作等一系列的功能函數(shù)。上面的幾行代碼可以讓你在腳本里調(diào)用這些庫命令,就像C++#include響應(yīng)的庫一樣。

  

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

  使用lua_dofile命令可以裝入、編譯、運(yùn)行Lua腳本。如果運(yùn)行的時(shí)候報(bào)錯(cuò)了,那么它會(huì)返回一個(gè)錯(cuò)誤的代碼。

  

 二、Lua的變量、類型、操作符和條件結(jié)構(gòu)

  搭建好環(huán)境終于可以寫些Lua代碼練練手了。但是在這之前我們還是先來熟悉一下Lua的變量、類型、操作符和條件結(jié)構(gòu)(如果你之前有任何一門編程語言的基礎(chǔ),那么這些內(nèi)容學(xué)起來將會(huì)十分輕松)。

  1.Lua變量

  Lua是一門動(dòng)態(tài)語言,它和C++/Java不同,變量是可以被賦予任何類型的值(這點(diǎn)和js,python等腳本一樣),比如:

  

--lua腳本開始啦! name="masanxiaohuoer" print("Name="..name); pi=3.1415926 name=pi pi=false

  在Lua中,注釋通常是以“--”開始的,如果要寫多行的注釋,可以這樣的結(jié)構(gòu):--[[這是一段注釋內(nèi)容]]。在lua中,每句代碼后面的分號(hào)可寫可不寫,但是當(dāng)你的代碼跨行的時(shí)候分號(hào)是必不可少的。同時(shí)在lua中可以同時(shí)給多個(gè)變量賦予多個(gè)值。

  

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

  如果左側(cè)的變量個(gè)數(shù)比右側(cè)的多的話,那么多余出來的變量就會(huì)被賦予nil值,nil在lua中表示沒有意義,空值(類似于C++中的NULL)。如果右側(cè)的值多的話,那么多余的值就會(huì)被丟棄掉了。在Lua中,有3中不同的變量:global(全局)、local(局部)、table fields(表)。如果一個(gè)變量沒有用local修飾的話,那么它默認(rèn)就是global的。在一個(gè)變量被賦值之前,它的值是nil。

  2.Lua類型

  Lua中有以下的8種基本數(shù)據(jù)類型:

  (1)Nil空

    nil和其他的類型都不同,她用來表示沒有意義,空值。一旦給一個(gè)值賦予了nil,它就消失了,好像從來沒有存在過一樣。

  (2)Number數(shù)值

    number類型用來表示浮點(diǎn)數(shù)。在lua內(nèi)部,這個(gè)值被處理為double。因此,當(dāng)傳遞number類型的變量給C/C++程序的時(shí)候,要記得將它們映射成對(duì)應(yīng)的正確類型。  

  (3)String字符串

    string類型是字符串類型,你可以使用“..”來鏈接兩個(gè)字符串。如果有一邊的類型不是string的話,那么它會(huì)被轉(zhuǎn)型為string類型,然后連接。

  (4)Boolean布爾

    用來表示true或者false的值類型,false或者nil都是假,其余的為真。

  (5)Function函數(shù)

    和C/C++不同,在Lua中,函數(shù)也是一種類型,也可以賦值給一個(gè)變量。因此通過使用那個(gè)變量的名字,你就可以調(diào)用那個(gè)函數(shù)。因?yàn)長(zhǎng)ua是弱類型的語言,參數(shù)列表和返回值都不需要指定類型。下面是一個(gè)簡(jiǎn)單的例子,求兩個(gè)數(shù)之和。在Lua中,函數(shù)塊通過end關(guān)鍵字來結(jié)束。

  

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

  如果你習(xí)慣用的是java或者C++一類的語言的話,可能會(huì)對(duì)這個(gè)語法感覺有點(diǎn)陌生。Lua提供了另外一個(gè)定義一個(gè)函數(shù)的方式,這樣看起來更像C++/java了:

  

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

  和C++不同的是,lua的函數(shù)可以一次返回多個(gè)變量,比如下面這樣寫是完全沒有問題的:

  

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

  (5)Table表

    table是Lua中一種非常重要也非常強(qiáng)大的數(shù)據(jù)類型,你可以把表看成一種關(guān)聯(lián)數(shù)組或者哈希表。這意味著你不但可以用整數(shù)來索引一個(gè)表,也可以使用任何類型的鍵值來索引一個(gè)表,而且lua的表是混合類型的,它們可以包含不同的數(shù)據(jù)類型。

  

--創(chuàng)建一個(gè)table my_table={} --添加一些數(shù)據(jù)到表中 my_table[1]=2333 my_table[2]=666 my_table[3]="HelloWorld"--或者你也可以一次性的初始化一個(gè)表 my_table={2333,666,"HelloWorld"}--關(guān)聯(lián)索引 my_table["one"]=2333 my_table[6]="Study"--除了使用[]以外,我們還可以使用.來存取一個(gè)值 my_table.one =2333--函數(shù)也可以賦值給表 function add(a,b)return a+b end my_table={} my_table["add"]=add print(my_table.add(2,3))

  (6)UserData用戶數(shù)據(jù)

    userdata類型允許Lua變量存儲(chǔ)定制的C/C++數(shù)據(jù)。一個(gè)userdata類型的變量不能在Lua中創(chuàng)建和修改,只有通過C/C++接口才可以(下篇我們會(huì)介紹這種方法)。

  (7)Thread線程

    通過這種類型,我們可以產(chǎn)生并運(yùn)行新的線程

  3.邏輯操作符

  Lua中有三種邏輯操作符,分別是:and,or,和not。他們和C++中的&&、||和!很像,并且和C++一樣,只有在必要的情況下,他們才會(huì)檢查第二個(gè)條件。nil和false為假,其他都為真。

  4.條件結(jié)構(gòu)

  Lua中提供了if\while\repeat\for幾種條件結(jié)構(gòu)。lua的幾個(gè)版本的if和while控制結(jié)構(gòu)和C++很類似,只不過lua中條件不需要寫在小括號(hào)中。

  

if a==4 thenprint("four") else print("other") end--while循環(huán) while a<=100 thena=a+1 end print(a)--while和if語句都已end關(guān)鍵字結(jié)束 --repeat和until關(guān)鍵字一起聯(lián)用,就像這樣: repeata=a+1print(a)until a==100--for結(jié)構(gòu)有兩個(gè)版本,一個(gè)用于數(shù)字,一個(gè)用于表 --用于數(shù)字的for循環(huán)的語法: for var=low_value,high_value,step do xxxxxx end--舉例 for a=10,20,2 do print(a) end

  和C/C++一樣,你也可以使用break來退出循環(huán)。

  另外還有一種for循環(huán)用來遍歷表

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

  key和value分別代表鍵和值,table就是我們要遍歷的表。

  

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

?

  到現(xiàn)在,我們已經(jīng)稍微對(duì)Lua有了一些了解,但是我們還不能用它來為我們的游戲程序服務(wù)。下篇我們將共同學(xué)習(xí)Lua和C/C++的接口,以及Lua如何應(yīng)用在Cocos2d-X和Unity引擎中。

?

作者:馬三小伙兒
出處:http://www.cnblogs.com/msxh/p/6033679.html?
請(qǐng)尊重別人的勞動(dòng)成果,讓分享成為一種美德,歡迎轉(zhuǎn)載。另外,文章在表述和代碼方面如有不妥之處,歡迎批評(píng)指正。留下你的腳印,歡迎評(píng)論! 

轉(zhuǎn)載于:https://www.cnblogs.com/msxh/p/6033679.html

總結(jié)

以上是生活随笔為你收集整理的【游戏开发】小白学Lua(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丰满女人又爽又紧又丰满 | 亚洲一区二区三区激情 | 性欧美18—19sex性高清 | 国产精彩视频 | 人人爽人人做 | 欧美精品乱码久久久久久按摩 | 日韩在线免费 | 日韩欧美久久 | 美女黄色免费网站 | 久久噜噜色综合一区二区 | 播放美国生活大片 | 欧美综合图片 | 最近中文字幕在线中文高清版 | 草比网站 | 久草在在线视频 | 欧美特级a | 日本精品人妻无码免费大全 | 天天想你在线观看完整版电影免费 | 特级毛片在线观看 | 色涩视频在线观看 | 开心激情综合网 | 亚洲午码 | 欧美激情在线观看 | 亚洲在线一区二区三区 | 欧美色国 | 日本一本久久 | 国产大片一区二区三区 | 在线观看日韩欧美 | 久操成人| 黄色一毛片 | 性久久 | 亚洲高清视频在线播放 | 国产精品久久久久久久无码 | 91伦理在线 | 国产精品久久久久久白浆 | 男人的天堂一区二区 | 中文字幕――色哟哟 | 三级黄片毛片 | jizz在线观看视频 | 修女也疯狂3免费观看完整版 | 脱女学生小内内摸了高潮 | 日韩欧美在线观看一区二区 | 国产欧美一区二区三区在线看蜜臀 | 国内精品国产三级国产aⅴ久 | 青青草十七色 | 岛国av在线免费观看 | 欧美成性色 | www.综合色| 热久久久久久久 | 免费观看理伦片在线播放视频软件 | www.亚洲精品 | 国产欧美精品aaaaaa片 | 一女双乳被两男吸视频 | 日本一区二区三区欧美 | 国产一区综合 | 韩国激情呻吟揉捏胸视频 | 男人操女人动漫 | 久草资源| 丁香五香天堂 | 污视频免费在线观看网站 | 91精品人妻一区二区三区蜜桃欧美 | 日日碰 | 四虎av网址 | 麻豆视频网 | 精品人妻一区二区三区换脸明星 | 欧美超碰在线观看 | 台湾佬成人中文网222vvv | 日韩午夜在线视频 | 精品人妻伦一二三区久久 | 69视频在线观看 | aaaaa毛片 | 色图插插插 | 日韩精品影院 | 黄色片免费在线播放 | 精品在线一区 | 国产美女激情视频 | 中文字幕1区2区 | 在线污视频 | 国产毛片毛片毛片毛片毛片毛片 | 色婷婷在线观看视频 | 久久久精品亚洲 | 美国一级片网站 | 国产做受高潮 | 波多野结衣视频在线播放 | 国产一区精品在线 | 日本一级片在线播放 | 一区二区亚洲 | 少妇被又大又粗又爽毛片久久黑人 | 日本女人毛片 | 三上悠亚痴汉电车 | 99久久99久久精品免费看蜜桃 | 在线天堂www在线国语对白 | 国产吞精囗交免费视频 | 午夜在线看 | 国产精品suv一区二区三区 | 日韩高清一级 | 91精品播放 | 日韩欧美在线视频 | 波多野结衣亚洲 |