青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

class.lua實現了在Lua中創建類的模擬,非常方便。class.lua參考自http://lua-users.org/wiki/SimpleLuaClasses

1 -- class.lua
2 -- Compatible with Lua 5.1 (not 5.0).
3
4 function class(base, init)
5 local c = {} -- a new class instance
6 if not init and type(base) == 'function' then
7 init = base
8 base = nil
9 elseif type(base) == 'table' then
10 -- our new class is a shallow copy of the base class!
11 for i,v in pairs(base) do
12 c[i] = v
13 end
14 c._base = base
15 end
16 -- the class will be the metatable for all its objects,
17 -- and they will look up their methods in it.
18 c.__index = c
19
20 -- expose a constructor which can be called by <classname>(<args>)
21 local mt = {}
22 mt.__call = function(class_tbl, ...)
23 local obj = {}
24 setmetatable(obj,c)
25
26 -- below 2 lines are updated based on the Comments from 'http://lua-users.org/wiki/SimpleLuaClasses'
27 -- if init then
28 -- init(obj,...)
29 if class_tbl.init then
30 class_tbl.init(obj,...)
31 else
32 -- make sure that any stuff from the base class is initialized!
33 if base and base.init then
34 base.init(obj, ...)
35 end
36 end
37 return obj
38 end
39 c.init = init
40 c.is_a = function(self, klass)
41 local m = getmetatable(self)
42 while m do
43 if m == klass then return true end
44 m = m._base
45 end
46 return false
47 end
48 setmetatable(c, mt)
49 return c
50 end

State基類,包含三個stub函數,enter()和exit()分別在進入和退出state時被執行,onUpdate()函數將會在state被激活時的每幀被執行。

1 require "class"
2
3 State = class()
4
5 function State:init( name )
6 self.name = name
7 end
8
9 function State:enter()
10 end
11
12 function State:onUpdate()
13 end
14
15 function State:exit()
16 end

StateMachine類,該類集成了Moai的MOAIThread類。MOAIThread類似于Lua中的coroutine,但是在Moai中被yield的MOAIThread,會在game loop的每幀中被自動resume,見StateMachine:updateState函數,利用此特點,來實現每幀執行State:onUpdate函數。

1 require "State"
2
3 StateMachine = class()
4
5 function StateMachine:init()
6 self.currentState = nil
7 self.lastState = nil
8 end
9
10 function StateMachine:run()
11 if ( self.mainThread == nil )
12 then
13 self.mainThread = MOAIThread.new()
14 self.mainThread:run( self.updateState, self )
15 end
16 end
17
18 function StateMachine:stop()
19 if ( self.mainThread )
20 then
21 self.mainThread:stop()
22 end
23 end
24
25 function StateMachine:setCurrentState( state )
26 if ( state and state:is_a( State ) )
27 then
28 if ( state == self.currentState )
29 then
30 print( "WARNING @ StateMachine::setCurrentState - " ..
31 "var state [" .. state.name .. "] is the same as current state" )
32 return
33 end
34 self.lastState = self.currentState
35 self.currentState = state
36 if ( self.lastState )
37 then
38 print( "exiting state [" .. self.lastState.name .. "]" )
39 self.lastState:exit()
40 end
41 print( "entering state [" .. self.currentState.name .. "]" )
42 self.currentState:enter()
43 else
44 print( "ERROR @ StateMachine::setCurrentState - " ..
45 "var [state] is not a class type of State" )
46 end
47 end
48
49 function StateMachine:updateState()
50 while ( true )
51 do
52 if ( self.currentState ~= nil )
53 then
54 self.currentState:onUpdate()
55 end
56 coroutine.yield()
57 end
58 end

如何利用State和StateMachine類的示例,首先定義兩個state。
SampleState.lua

1 require "State"
2
3 State1 = class( State )
4
5 function State1:init()
6 State.init( self, "State1" )
7 end
8
9 function State1:enter()
10 self.i = 0
11 end
12
13 function State1:exit()
14 self.i = 0
15 end
16
17 function State1:onUpdate()
18 print( self.name .. " is updated" )
19 self.i = self.i + 1
20 print( "self.i=" .. self.i )
21 if ( self.i == 10 )
22 then
23 print( state2 )
24 SM:setCurrentState( state2 )
25 self.i = 0
26 end
27 end
28
29 -----------------------
30
31 State2 = class( State )
32
33 function State2:init()
34 State.init( self, "State2" )
35 end
36
37 function State2:onUpdate()
38 print( "State2 is updated" )
39 end

test.lua

1 require "StateMachine"
2 require "SampleState"
3
4 SM = StateMachine()
5 SM:run()
6 state1 = State1()
7 state2 = State2()
8 SM:setCurrentState( state1 )
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情影院| 国产精品毛片| 亚洲福利国产| 卡一卡二国产精品| 乱中年女人伦av一区二区| 亚洲第一中文字幕在线观看| 欧美xxxx在线观看| 欧美激情一区二区三区不卡| 99成人精品| 亚洲在线第一页| 国产日韩综合| 欧美国产免费| 欧美日本二区| 久久精品国产精品亚洲综合| 久久久久久久久蜜桃| 亚洲精品一区二区三区四区高清| 日韩视频一区二区三区在线播放免费观看 | 亚洲精品三级| 欧美性猛交xxxx乱大交退制版| 午夜精品福利视频| 久久精品视频免费播放| 亚洲美女免费精品视频在线观看| 国产精品99久久不卡二区| 国产一区二区三区四区| 亚洲激情网站| 国产一区二区三区久久久| 亚洲国产日韩在线一区模特| 国产精品乱码妇女bbbb| 免费的成人av| 国产精品欧美久久| 欧美韩日一区二区三区| 国产精品久久久久久一区二区三区| 久久久综合精品| 欧美三日本三级少妇三2023| 免费观看久久久4p| 国产精品乱码| 亚洲免费大片| 亚洲国产欧美一区二区三区久久 | 日韩午夜在线播放| 黄色一区二区三区| 99精品欧美| 亚洲清纯自拍| 久久久久国产一区二区三区| 午夜一级久久| 欧美图区在线视频| 欧美大片第1页| 国产又爽又黄的激情精品视频| av不卡在线看| 亚洲欧洲一区二区三区在线观看| 午夜亚洲福利| 欧美怡红院视频一区二区三区| 欧美日韩mv| 亚洲国产精品成人| 亚洲经典视频在线观看| 久久精品视频播放| 久久久国产午夜精品| 国产精品日本欧美一区二区三区| 亚洲精品久久久久久下一站| 亚洲区在线播放| 嫩草影视亚洲| 欧美激情国产日韩| 亚洲国产精品国自产拍av秋霞| 久久九九热免费视频| 久久久综合免费视频| 国产亚洲电影| 欧美一区二区在线看| 亚洲欧美自拍偷拍| 国产精品一区二区你懂的| 在线一区日本视频| 校园激情久久| 国产视频一区在线观看| 欧美制服丝袜| 免费成人在线视频网站| 亚洲福利电影| 欧美激情第10页| 日韩视频三区| 欧美一区二区三区在线观看视频| 国产噜噜噜噜噜久久久久久久久| 午夜精品一区二区三区在线视| 久久国产福利国产秒拍| 国产在线视频欧美| 久久在线视频| 亚洲日本久久| 欧美一区二区私人影院日本| 国产色婷婷国产综合在线理论片a| 性久久久久久久| 欧美高清在线一区二区| 亚洲精品午夜| 国产精品爽黄69| 久久久久久久综合日本| 欧美激情一区二区三区高清视频| 在线视频亚洲一区| 国产精品久久久久毛片软件| 欧美在线三区| 亚洲国产精品视频| 亚洲欧美久久久| 黄网动漫久久久| 欧美久久久久久| 午夜精品一区二区三区在线| 欧美肥婆在线| 小处雏高清一区二区三区| 韩国一区二区三区在线观看| 欧美日韩成人综合天天影院| 久久国产88| 99国产精品久久久| 狂野欧美激情性xxxx| 亚洲性人人天天夜夜摸| 国产一区深夜福利| 欧美日韩另类丝袜其他| 先锋亚洲精品| 亚洲伦理精品| 欧美不卡三区| 久久大逼视频| 亚洲与欧洲av电影| 亚洲国产天堂网精品网站| 国产伦精品一区二区三区高清版| 麻豆精品91| 欧美在线视频在线播放完整版免费观看| 亚洲国产精品尤物yw在线观看| 久久精品国亚洲| 午夜欧美大尺度福利影院在线看| 91久久夜色精品国产九色| 国产精品影视天天线| 欧美日韩一区二区三区四区五区| 久久一综合视频| 欧美一级二区| 午夜精品久久99蜜桃的功能介绍| 亚洲美女精品成人在线视频| 欧美国产日韩在线| 美国三级日本三级久久99| 性欧美办公室18xxxxhd| 亚洲永久字幕| 亚洲小说欧美另类婷婷| 这里只有精品电影| 亚洲日本无吗高清不卡| 亚洲国产精品久久精品怡红院 | 欧美日韩成人一区二区三区| 免费观看成人www动漫视频| 久久riav二区三区| 亚洲欧美日韩国产| 亚洲永久精品国产| 在线亚洲自拍| 亚洲伊人第一页| 午夜精品成人在线| 欧美一区二区三区免费观看| 亚洲欧美一区二区在线观看| 亚洲欧美经典视频| 欧美一级专区| 久久精品国产96久久久香蕉| 欧美影院成年免费版| 久久久国产午夜精品| 久久一日本道色综合久久| 久久视频这里只有精品| 欧美成人免费网| 欧美日韩国产综合新一区| 欧美视频在线观看视频极品| 国产精品乱码妇女bbbb| 国产欧美日韩一区二区三区在线| 国产日韩视频| 在线成人激情| 亚洲久久在线| 亚洲欧美一区二区原创| 久久久xxx| 欧美激情影院| 一区二区三区免费看| 午夜在线电影亚洲一区| 久久人人爽人人爽爽久久| 欧美福利专区| 国产精品毛片一区二区三区| 国产三级欧美三级日产三级99| 1024成人| 亚洲视频一区在线| 久久久久久久一区| 欧美激情亚洲综合一区| 亚洲精品视频一区| 亚洲欧美日韩一区二区三区在线观看 | 国产精品视频免费观看www| 国产区精品在线观看| 亚洲国产高清aⅴ视频| 中文无字幕一区二区三区| 久久精品青青大伊人av| 亚洲国产成人精品女人久久久| 一区二区三区国产在线| 久久久午夜视频| 欧美午夜精品久久久久久孕妇| 国内精品久久久久久久影视麻豆| 亚洲黄网站在线观看| 亚洲一区二区三区乱码aⅴ| 久久久免费av| 91久久精品美女高潮| 午夜精品成人在线| 欧美华人在线视频| 国产日韩一区在线| 一区二区三区 在线观看视频| 久久久久久久精| 一本色道久久综合亚洲精品不卡 | 欧美一区二区性| 欧美日韩一区二区三区四区在线观看 | 国产一区二区三区精品欧美日韩一区二区三区 | 免费看黄裸体一级大秀欧美|