我是Lua的新手,我想知道是否有办法让很多类对象在我的情况下制作不同的项目,就像在C#或Java等OOP语言中一样。我所说的一个例子是Lua中的这类课程......
weapon = {}
function weapon.load()
{
weapon.name = "CHASE'S BUG"
weapon.damage = 1
weapon.rare = "Diet Valley Cheez"
weapon.hottexture = love.graphics.newImage("/ledata/invalid.png")
weapong.playtexture = love.graphics.newImage("/ledata/invalid.png")
weapon.dura = 1
weapon.type = "swing"
}
但是在一个主类中你可以创建该类的新对象,就像C#
那样。weapon Dagger = new weapon();
Dagger.name = "Dagger of Some Mountain"
...
Lua有没有办法做到这一点?
答案 0 :(得分:3)
另一种方法是使用像这样的表(使用汽车的例子):
Car = {}
Car.new = function(miles,gas,health)
local self = {}
self.miles = miles or 0
self.gas = gas or 0
self.health = health or 100
self.repair = function(amt)
self.health = self.health + amt
if self.health > 100 then self.health = 100 end
end
self.damage = function(amt)
self.health = self.health - amt
if self.health < 0 then self.health = 0 end
end
return self
end
它创建一个名为'Car'的表,它相当于一个类,而不是一个实例,然后它在Car类中定义一个方法“new”,它返回一个带有变量和函数的汽车实例。使用此实现的示例:
local myCar = Car.new()
print(myCar.health)
myCar.damage(148)
print(myCar.health)
myCar.repair(42)
print(myCar.health)
答案 1 :(得分:2)
有很多方法。这很简单。没有太多的OOP,你没有继承和其他一些东西。但我认为这适用于你的情况。
function weaponFire ()
print "BANG BANG"
end
function newWeapon (opts)
local weaponInstance = {}
weaponInstance.name = opts.name
weaponInstance.damage = opts.damage
weapon.fire = weaponFire
return weaponInstance
end
答案 2 :(得分:1)
Lua是面向对象的,但它不像Java / C ++ / C#/ Ruby等,没有原生的类,创建新对象的唯一方法是克隆现有对象。这就是为什么它被称为prototype language(如JavaScript)。
阅读Programming in Lua Chapter 16。您可以使用metatable模拟正常的OOP。
答案 3 :(得分:0)
因为您使用love2d进行了标记,所以您可以查看middleclass。那里有docs。而且它有像stateful这样的插件,主要用于游戏和love2d。