您的位置:首页 > 编程语言 > Lua

Lua游戏开发 语法

2013-10-18 18:00 344 查看
二.lua字符处理

1.类型转换

字符转换为数字 tonumber()

myString = "1234";

myNumber = tonumber(myString);

print(myNumber+2);

数字转换为字符 tostring()

myNumber = 1234

myString = tostring(myNumber)

print(type(myString))

2.string char(n1, n2, ...)

函数根据ascII编码返回传入参数对应的字符。在Lua游戏保存文件中插入一个换行符的时候非常有用。

myFile:write(string.char (10))

3.string.len(myString)返回字符串的长度

myString = "1234"

print(string.length(myString))

4.string.sub(myString, start, end) 返回指定字符串的子串

myString = "hello world"

newString = string.substr(myString, 1, 5)

print(newString) --"hello"

start为负数,子串的位置从字符串的最后开始计算,如果start为-5,返回字符串的最后5位

myString = "hello world"

newString = string.sub(myString, -5, 10)

end参数可以省略,这时会返回从start到字符串末尾的子串。(可以获取指定字符的后缀)

myString = "hello world"

newString = string.sub(myString, -5)

print(newString) "world"

5.string.format() 格式化输出指定字符串(可以连接字符串,Lua不能简单地连接两个字符串)

string1 = "hello"

string2 = "world"

for Index = 1, 3 do

string1 = string.format("%s%s", string1, string2)

end

print(string1)



根据参数格式化输出复杂的字符串

myName = "Fred"

myStr = 16

myString = string.format("%s%s%d%s", myName, "'s strength is ", myStr, ".")

or myString = string.format("%s's strength is %d.", myName, myStr)

print(myString)

输出指定位数的数字

myHealth = 17.34556

myString = string.format("%.2f%s", myHealth, "% of health remaining.")

print(myString) -- prints "17.35% of health remaining."

%.2f 表示两位小数的格式输出myHealth的值

6.string.find(sourseString, findString) 在sourseString中查找第一个符合findString字符的位置。找到了就返回它的开始和结束位置。否则返回nil。

myString = "My name is John Smith."

sStart, sEnd = string.find(myString, "John")

print(sStart, sEnd) -- 12, 15

7.字符和格式,字符处理函数支持格式化,格式是一种模板,可以让Lua从字符串中过滤出有意义的结果

myString = "The price is $17.50"

filter = "$%d%d.%d%d"

print(string.sub(myString, string.find(myString, filter))) -- $17.50

大写字母是完全相反的格式,%d表示所有数字,%D则表示非数字

加%前缀可以让特殊符号(例如().%+-*?[^$] 也能用在格式中,%%代表百分比符号%

LUA支持的格式化输出符号

. 所有字符

%a 字母

%d 数字

%l 小写字母

%p 标点符号

%s 空格符号

%u 大写字母

%w 字母数字

%x 十六进制数

%z 用0表示的字符

7.1string.gsub(sourceString, PATTERN, replacementString) 返回一个字符串,sourceString字符中满足pattern格式的字符都会被替换成replacementString参数的值

myString = "My name is John Smith. My phone is 555-3257."

newString = string.gsub(myString, "%d", "*")

print(newString) -- returns "My name is John Smith. My phone is ***-****."

使用这种方式还可以更新电话号码中的区号,例如:

custData = "(309) 555-1234"

custData = string.gsub(custData, "%(%d%d%d%)", "(781)")

print(custData) -- prints "(781) 555-1234"

可在函数的最后加一个可选参数,用于指定替换的次数,例如

myString = "happy, hello, home, hot, hudson"

myString = string.gsub(myString, "h%a+", "An H word!", 2)

print(myString) -- 以h开头的字符,%a+表示任意长度的字母,并在遇到空格或者标点符号时为止。最后的参数2表示只替换最先找到的两个字符串。

7.2string.gfind(sourceString, pattern)

string.gfind函数遍历一个字符串,一旦查找到符合指定格式的字符串,就返回该子串

myString = "This is my rather long string"

print(myString)

counter = 1

for myWord in string.gfind(myString, "%a+") do

print(string.format("Word #%d: %s", counter, myWord))

counter = counter + 1

end

%a+匹配独立的单词,在解析游戏数据时非常有用

table数据结构

myTable = {}

for Index = 1, 100 do

myTable[Index] = math.random(1, 1000)

end

1.table.getn(myTable) 返回table中元素的个数

通常用table来保存游戏数据。

for index = 1, table.getn(myTable) do

print(myTable[Index])

end

table.sort(myTable)

这个简单的函数遍历了整个table,并从小到大重新排列。还可以添加函数名作为另一个参数,然后通过该函数得到比较的结果(true or false),并根据它来排序 function Sort(theTable, direction)

if direction ~= 1 then

table.sort(theTable)

else

function Reverse(a, b)

if a < b then

return false

else

return true

end

end

end

end



该函数的参数为table, 然后像table.sort()一样排序。如果添加第二个可选参数1,那么该table会以相反的方向排序(降序)

2.table.insert(myTable, position, value) 在table中插入一个新的值,位置参数可选。如果没设定添加新值到table末尾,如果指定了该值,则插入到指定位置。

table.insert(myTable, 25, "hello")



3.table.remove(myTable, position) 从table中删除并返回一个元素,必要时重新索引table。如果没有指定position值,默认删除table的最后一个元素。

print(table.remove(myTable, 25))

4.table引用

myData = {}

myData.name = "ThardWick"

myData.class = "Barbarian"

myData.str = math.random(3, 18)

myData.dex = math.random(3, 18)

and also

myData[1] = 17

myData[2] = 34

myData[3] = 24

5.多维table

如何用多维table保存和载入游戏进度。可以把多维table当做table中的table。可以使用多个关键字访问

widget ={}

widget.name = {}

widget.cost = {}

widget.name[1] = "Can operner"

widget.cost[1] = "$12.75"

widget.name[2] = "Scissors"

widget.cost[2] = "$8.99"

6.pairs() 遍历table中的每一个元素

myName = {"Fred", "Ethel", "Lucy", "Ricky", "Rockey", "Betsy", "Bill"}

for index, value in pairs(myNames) do

print(index, value)

end



等价于

for index = 1, table.getn(myNames) do

print(index, myNames[index])

end

遍历非数字时很有用

myData = {}

myData.name = "Bill"

myData.interest = "Wind surfing"

myData.quoto = "Cold out, eh?"

myData.shoesize = 11

for index, value in pairs(myData) do

print(index, value)

end

index 会打印出 name, interest, quoto, shoesize

IO基础

Lua开发保存和载入系统的最大好处是根本不需要解析游戏数据

打开文件输出数据

myFile = io.open("test_data.lua", "w")

io.open()有两个参数:文件名和输出方式。w代表写模式,文件不存在则创建一个文件,同时写入时会覆盖之前的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: