轉自:http://www.himigame.com/lua-game/1282.htmlhtml
上一篇中,向童鞋們介紹瞭如何自定義類binding到Lua中供給使用的教程,那麼本篇將介紹利用OOP思想在在Lua中進行建立一個自定義類。node
首先Himi來向你們講解如何在Lua中不binding來自定義lua類,其實這種方式在Cocos2dx的Lua Samples已經爲咱們作好了例子,就看童鞋們是否定真閱讀了。此示例路徑在你解壓cocos2dx引擎包下的cocos2d-2.1rc0-x-2.1.2/samples/Lua/TestLua 中的 TouchesTest ,以下圖:ide
在這個示例中Ball.lua 與 Paddle.lua 分別做爲對象進行的Lua編寫,尚未看到過的童鞋請自行看下吧。函數
閒言少敘,下面詳細介紹使用Lua來自定義lua類的步驟:ui
第一步:lua
咱們到Cocos2dx引擎目錄下的 samples/Lua/TestLua/Resources/luaScript 下找到「extern.lua」 文件,其內容以下所示:spa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
-
-
Create an
class
.
function
class
(classname,
super
)
local superType
=
type
(
super
)
local
cls
if
superType ~
=
"function"
and
superType ~
=
"table"
then
superType
=
nil
super
=
nil
end
if
superType
=
=
"function"
or
(
super
and
super
.__ctype
=
=
1
) then
-
-
inherited
from
native C
+
+
Object
cls
=
{}
if
superType
=
=
"table"
then
-
-
copy fields
from
super
for
k,v
in
pairs(
super
) do
cls
[k]
=
v end
cls
.__create
=
super
.__create
cls
.
super
=
super
else
cls
.__create
=
super
end
cls
.ctor
=
function() end
cls
.__cname
=
classname
cls
.__ctype
=
1
function
cls
.new(...)
local instance
=
cls
.__create(...)
-
-
copy fields
from
class
to native
object
for
k,v
in
pairs(
cls
) do instance[k]
=
v end
instance.
class
=
cls
instance:ctor(...)
return
instance
end
else
-
-
inherited
from
Lua
Object
if
super
then
cls
=
clone(
super
)
cls
.
super
=
super
else
cls
=
{ctor
=
function() end}
end
cls
.__cname
=
classname
cls
.__ctype
=
2
-
-
lua
cls
.__index
=
cls
function
cls
.new(...)
local instance
=
setmetatable({},
cls
)
instance.
class
=
cls
instance:ctor(...)
return
instance
end
end
return
cls
end
function schedule(node, callback, delay)
local delay
=
CCDelayTime:create(delay)
local callfunc
=
CCCallFunc:create(callback)
local sequence
=
CCSequence:createWithTwoActions(delay, callfunc)
local action
=
CCRepeatForever:create(sequence)
node:runAction(action)
return
action
end
function performWithDelay(node, callback, delay)
local delay
=
CCDelayTime:create(delay)
local callfunc
=
CCCallFunc:create(callback)
local sequence
=
CCSequence:createWithTwoActions(delay, callfunc)
node:runAction(sequence)
return
sequence
end
|
這個Lua中提供了3個方法: 第二個函數與第三個函數分別是更新函數與序列動做函數,很easy 很少說。設計
咱們主要關注的是 第一個函數:code
class(classname,super) , 此函數能夠用於建立咱們自定義lua類orm
第一個參數:自定義類名
第二個參數: 自定義類所繼承的父類
至於其中的實現,你們須要掌握Lua的語言與程序設計,比較容易理解的。
第二步:咱們自定義一個精靈類,且繼承CCSprite,其文件名Himi這裏隨便起的是「MySprite.lua」 ,以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
require
"extern"
-
-
導入模板,做用調用其
class
函數
MySprite
=
class
(
"MySprite"
,
function(fileName)
return
CCSprite:create(fileName)
end
)
MySprite.__index
=
MySprite
-
-
用於訪問
MySprite.
type
=
0
-
-
自定義屬性
function MySprite:createMS(fileName,_type)
-
-
自定義構造函數
local mySprite
=
MySprite.new(fileName)
mySprite:myInit(_type)
return
mySprite
end
function MySprite:myInit(_type)
-
-
自定義函數
self
.
type
=
_type
end
|
比較簡單不贅述。