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

Lua基础语法-1

2015-01-14 10:15 861 查看


关于冒号: 1、 定义的时候: Class:test()与
Class.test(self)是等价的 ,点号(.)要达到冒号(:)的效果要加一个self参数到第一个参数;

2: 所有的语言,都要用到变量。在Lua中,不管在什么地方使用变量,都不需要声明

string:

1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...

2. string库中所有的function都不会直接操作字符串,而是返回一个结果

string.byte(string [,pos]):返回第pos个字符的整数表示形式.如a为97.
string.char(i1,i2...):i1,i2为整型,将i1,i2..等转化为对应的字符然后连接成字符串,并返回.如i1=97则返回a.
string.dump(functoin):返回一个参数函数的2进制代码.(疑问)
string.find(s,pattern [,init [,plain]]):查找pattern在s中的位置,返回pattern在s中的开始位置和结束位置.init是开始查找的位置.plain未知.
string.len(s):返回字符串的长度.
string.lower(s):变小写.
string.upper(s):变大写.
string.rep(s,n):将s拷贝n份,并连接起来,返回.
string.sub(s,i [,j]):取s中从i开始到j为止的自字符串.默认j为长度.-i表示倒数.

s = "[abc]"

string.len(s) <==返回5

string.rep("abc", 2) <==返回"abcabc"

string.lower("ABC") <==返回"abc"

string.upper("abc") <==返回"ABC"

string.sub(s, 2) <==返回"abc]"

string.sub(s, -2) <==返回"c]"

string.sub(s, 2, -2) <==返回"abc"

string.format(fmt, ...)返回一个类似printf的格式化字符串

---------




为什么会有 quick



quick 与 cocos2d-x 相比到底有什么区别,又有什么加强呢?

cocos2d-x 是一个用 C++ 开发的游戏引擎,其架构设计和 API 基本上是照搬的 cocos2d-iphone(一个用 Objective-C 的 iOS 游戏开发引擎)。



由于 C++ 对开发人员要求较高,所以网龙科技利用 tolua++ 这个工具,将 cocos2d-x 的 C++ 接口转为了 Lua 接口(这种将 C++ 接口导出为 Lua 接口的库通常称为 luabinding)。让开发者可以使用 Lua 这种简单易懂的脚本语言来编写游戏,从而大大提高开发效率。


*************************************************************************



package.path = package.path .. ";src/"
cc.FileUtils:getInstance():setPopupNotify(false)
-- cc.FileUtils:getInstance():getFileFullName();

-- require("app.MyApp").new():run()

-- print("12235444")

--[[
a = {1,2,3};
b = a
print(a == b)
-- if (a == nil) {print(1); print(2) }
-- if a != nil then print(a) end
-- print(4 and 5)

print("This a " .. "string." )
print("lua" .. "is a "); print(" laguage ")

---- for
-- for i=1,10 do
-- print("hello" .. i) -- ;
-- end
-- -- function complier
-- function add( a, b)
-- return a+b;
-- end

-- print("the resault of fun :" add(3,5));

]]
----********table

--[[ a = 1250;
-- print("a: " a);

_table = {100,20,8,9};
table.insert(_table, 10, 2000);

-- table.foreachi(_table, print);

for i=1,4 do
print(_table[i])
end

table.sort( _table )

for i,v in ipairs(_table) do
print(i,v)
end
]]

--[[ B = {5, 1,2, name = "Li Ming", ["age"] = 25};
print(#B)
]]

--[[ A = 10;
print("as" .. A) -- it is true

if 4 > 5 then
local A = 20 -- local to the then body
print(A);
elseif 4 < 4 then --> syntax
print(A) --> 10 (the global one)

elseif A == 10 then
print("A=== resault")

end
]]

--[[ --ipairs
_test = {[33] = "name", [10] = "age", [3] = "ok", ["cuo"] = "please"}

for i,v in ipairs(_test) do
print("ipairs" .. " " .. i,v)
-- end -->所以, 当调用ipairs的时候, 在线性数组中遇到第一个nil时便停止遍历, 不管后面还是否有值, 这点在遍历的时候要格外注意
--在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

for k,v in pairs(_test) do
print("pairs" .. " " .. k,v)
end
]]
// table的数组部分存储 : key从一开始并且连续的部分
function _test( )
a = {10, name = "please", [2] = 11};
return a;
end

--[[
_test();
print(table.getn(a)); -- 长度都是值得 数组空间的长度
print("#a" .. #a); -- [3] to 1
]]
local d = _test(); -- 作用域 本文件有用 不在语句块中
a.k = 1;

table.insert();
table.remove(d, 3);
for i,v in ipairs(d) do -- d为啥还可以使用?
print(" " .. i,v)
end

--[[
function add( )

AA = 10; --全局变量 不是局部变了 (前提: 要调用)
local D = 50; -- 函数调用结束就消失
end

add() -- 因为为调用。所以 AA 是nil
print("AA" .. " " .. AA)
]]

--[[
-- function
function add ( a , b )
return a+b;
end
print(add(10,60)
]]

1:Quick框架中的display文件,里面放的是与显示相关的部分接口

2:比如我们想要新建一个精灵,我们会调用display.newSprite
2:类似的接口还有display.newLayer。基本的格式都是display.newXXX,"XXX"包括sprite、layer、node、scene等,详细的可以查看display文件。

3:在Quick中使用图片有个规则,如果使用的图片是以#开头的话表示是从SpriteFrameCache中读取,如果没有使用#开头的话表示是直接从文件读取。
打开Player.lua文件,添加以下内容:

local Player = class("Player", function() -- ?
local sprite = display.newSprite("#player1-1-1.png")
return sprite
end)

function Player:ctor()

end

return Player

4:在Quick中创建一个类很简单,廖大已经给我们留好了一个class方法,只需要使用这个方法就能轻松的创建一个类。我们来看下具体的创建方式: 首先第一句:
打开Quick的functions.lua文件,里面有class方法的具体实现

5:现在,我们知道了显示层级、触摸区域,那么要让任何 CCNode 都可以接受触摸事件就变得很简单了:

package.path = package.path .. ";src/"
cc.FileUtils:getInstance():setPopupNotify(false)
-- cc.FileUtils:getInstance():getFileFullName();

-- require("app.MyApp").new():run()

-- print("12235444")

--[[
a = {1,2,3};
b = a

print(a == b)

-- if (a == nil) {print(1); print(2) }
-- if a != nil then print(a) end
-- print(4 and 5)

print("This a " .. "string." )
print("lua" .. "is a "); print(" laguage ")

---- for
-- for i=1,10 do
-- print("hello" .. i) -- ;
-- end
-- -- function complier
-- function add( a, b)
-- return a+b;
-- end

-- print("the resault of fun :" add(3,5));

]]
----********table

--[[ a = 1250;
-- print("a: " a);

_table = {100,20,8,9};
table.insert(_table, 10, 2000);

-- table.foreachi(_table, print);

for i=1,4 do
print(_table[i])
end

table.sort( _table )

for i,v in ipairs(_table) do
print(i,v)
end
]]

--[[ B = {5, 1,2, name = "Li Ming", ["age"] = 25};
print(#B)
]]

--[[ A = 10;
print("as" .. A) -- it is true

if 4 > 5 then
local A = 20 -- local to the then body
print(A);
elseif 4 < 4 then --> syntax
print(A) --> 10 (the global one)

elseif A == 10 then
print("A=== resault")

end
]]

--[[ --ipairs
_test = {[33] = "name", [10] = "age", [3] = "ok", ["cuo"] = "please"}

for i,v in ipairs(_test) do
print("ipairs" .. " " .. i,v)
-- end -->所以, 当调用ipairs的时候, 在线性数组中遇到第一个nil时便停止遍历, 不管后面还是否有值, 这点在遍历的时候要格外注意
--在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

for k,v in pairs(_test) do
print("pairs" .. " " .. k,v)
end
]]

function _test( )
a = {10, name = "please", [2] = 11};
return a;
end

--[[
_test();
print(table.getn(a)); -- 长度都是值得 数组空间的长度
print("#a" .. #a); -- [3] to 1
]]
local d = _test(); -- 作用域 本文件有用 不在语句块中
a.k = 1;

table.insert();
table.remove(d, 3);
for i,v in ipairs(d) do -- d为啥还可以使用?
print(" " .. i,v)
end

--[[
function add( )

AA = 10; --全局变量 不是局部变了 (前提: 要调用)
local D = 50; -- 函数调用结束就消失
end

add() -- 因为为调用。所以 AA 是nil
print("AA" .. " " .. AA)
]]

--[[
-- function
function add ( a , b )
return a+b;
end
print(add(10,60)
]]



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: