我来自传统的游戏开发,使用面向对象编程(OOP)原则。据我所见,一旦你知道该怎么做,就可以使用LUA模拟这种方法。在一些代码发布中,我发现了如何使用director类以及创建具有new()函数等的文件。
我正在寻找一种管理武器的方法。我有一个玩家和一个对手,我希望有一个武器类,比如weaponCanon。我所做的是:
-- private vars here
local power
local canonSprite
local whatever
local someFunction = function()
...
end
-- Private stuff here
local weaponCanon = {}
weaponCanon.fire = function(atX, atY)
...
end
weaponCanon.reset = function()
...
end
return weaponCanon
然后在我的级别代码中,我只需要这样做:
local weaponCanon = require("weaponCanon")
weaponCanon.fire(100, 100)
这很有用,使我能够在编写武器时使用“私人”和“公共”思维方式。但问题是如果我想让玩家和对手都有一个大炮:
local playerWeapon = require("weaponCanon")
local opponentWeapon = require("weaponCanon")
这只是简单地返回同一个对象,而不是一个新实例对象。这意味着在对手武器位置上我只得到了一个weaponCanon。显然这不是我想要或需要的。
我们的游戏中有很多武器,只有每个文件的一个版本并且设置告诉我们它是否是对手的武器或玩家的武器,将会很好。另一种选择是复制每个文件并创建weaponPlayerCanon和weaponOpponentCanon,但是当我想要修改一个文件并且每次都必须更改2个或更多文件时,我感到非常沮丧。
如何让它返回实例对象以及LUA文件的结构是什么?
感谢任何帮助!
-d