您的位置:首页 > 移动开发 > Cocos引擎

Lua/cocos2d-lua中定义类的四中方法

2016-01-08 13:52 441 查看
=====Account Start==========
local Account = {
balance = 0,

--  withdraw = function(self, v)
--     self.balance = self.balance - v
--  end,
}

function Account : withdraw(v)
if v > self.balance then
--error "insufficient funds"
end
self.balance = self.balance - v
end

function Account : deposit(v)
self.balance = self.balance + v
end

function Account : new(account)
account = account or {}
setmetatable(account, self)
self.__index = self

return account
end
--=====Account End==========

--=====SpecialAccount Start==========
local SpecialAccount = Account : new()
function SpecialAccount : withdraw(v)
if v - self.balance >= self : getLimit() then
error "insufficient funds"
end
self.balance = self.balance - v
end

function SpecialAccount : getLimit()
return self.limit
end
--=====SpecialAccount End==========

--=====NewAccount Start==========
local NewAccount = {}
function NewAccount : new(initialBalance)
local self = {balance = initialBalance}

local withdraw = function(v)
self.balance = self.balance - v
end

local deposit = function(v)
self.balance = self.balance + v
end

local getBalance = function()
return self.balance
end

return {
withdraw = withdraw,
deposit = deposit,
getBalance = getBalance
}
end
--=====NewAccount End==========

--=====Test Start==========
local Test = class("Test", Account)
function Test : ctor(name)
print("get a name:", name)
end

function Test : print()
print("I'm test class's print function", self.balance)
end
--=====Test End==========
local t = Test : new()
t : withdraw(100)
t : print()

local acc1 = NewAccount : new(100)
acc1.withdraw(40)
print("NewAccount余额", acc1.getBalance())

local s = SpecialAccount : new({limit = 1000})
s : withdraw(200)

local MainScene = class("MainScene", cc.load("mvc").ViewBase)

function MainScene:onCreate()
-- add background image
display.newSprite("MainSceneBg.jpg")
:move(display.center)
:addTo(self)

-- add play button
local playButton = cc.MenuItemImage:create("PlayButton.png", "PlayButton.png")
:onClicked(function(sender)
--self:getApp():enterScene("PlayScene")
--local layer = cc.TestLayer:create()
-- layer:myPrint("哈哈")

local a1 = Account : new({balance = 0})
--   a1:deposit(100)
--a1.deposit(a1, 100)
-- getmetatable(a1).__index.deposit(a1, 100)
-- Account.deposit(a1, 100)
--a1 : withdraw(100)
print("余额:", a1.balance)

end)

cc.Menu:create(playButton)
:move(display.cx, display.cy - 200)
:addTo(self)
end

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