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代表写模式,文件不存在则创建一个文件,同时写入时会覆盖之前的数据。
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代表写模式,文件不存在则创建一个文件,同时写入时会覆盖之前的数据。
相关文章推荐
- 小小菜之Cocos2d-x游戏开发旅程——Lua语法总结
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读
- cocos2dx-lua 在cocos2d中使用lua脚本进行开发,并介绍脚本在游戏中的详细用途
- Cocos2d-x lua游戏开发之安装Lua到mac系统
- Cocos 2d-X Lua游戏开发Mac环境搭建以及一点点感悟
- 【Unity游戏开发之七】Unity利用语法糖添加自定义拓展方法(上)
- 【cocos2d-x3.2游戏开发】 lua 类, 继承, 面向对象
- sublime_text 2.0.2 绑定cocos2dx lua 开发游戏
- Cocos2d-x游戏开发之Lua学习笔记
- Lua游戏开发(二)---cocos2d VS libgdx VS unity3d
- 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
- 【Lua游戏开发】os库-时间函数 转
- Cocos2d-x游戏开发Lua
- Cocos2d-x lua游戏开发之安装Lua到mac系统
- quick-cocos2d-x从零开始游戏开发笔记(二):Lua语言基础学习
- Cocos2d-x 3.2 lua飞机大战开发实例(三)道具的掉落,碰撞检测,声音,分数,爆炸效果,完善游戏的功能细节
- Lua游戏脚本开发1 -- 初始化Lua
- lua游戏开发实践指南学习笔记2
- 转载一个简单的lua展示【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
- cocos2dx游戏开发学习笔记3-lua面向对象分析