cocos2dx -lua 面向對象-轉

轉自: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

 QQ20130408-1

     在這個示例中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

 

比較簡單不贅述。

相關文章
相關標籤/搜索