Corona LUA和OOP Design
|
因此,我来自使用OOP原理的传统游戏开发,而我所看到的是,一旦知道自己在做什么,就可以使用LUA模仿它。在一些代码发布中,我发现了如何使用Director类并创建具有new()函数等的文件。
我正在寻找一种管理武器的方法。我有一个玩家和一个对手,并且我希望拥有一个武器等级,比如canvasCanon。我所做的是:
-- 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\")
这只是返回相同的对象,而不是对该对象的新实例。所以我在对手武器位置只得到一把武器佳能。现在这显然是我想要/需要的。
我们的游戏中包含许多武器,每个文件只有一个版本并设定一个设置告诉我们是对手武器还是玩家武器,将是很好的选择。另一种选择是复制每个文件并创建一个武器玩家佳能和武器武器佳能,但是我不赞成修改一个文件,并且每次必须更改2个以上的文件。
如何使它返回一个实例,LUA文件的结构是什么?
谢谢或任何帮助
-d
没有找到相关结果
已邀请:
5 个回复
抵舵
并在您的调用代码中(也未经测试):
脾萌
LaserCannon易于实现-您只需将第二个参数传递给类:
您可以这样使用它:
这是我喜欢的中产阶级,因为我做到了。我之前提到的页面上的其他库也提供类似的功能。
嗓瑰
而且无论如何,您只创建一次对象,就需要一个用于创建表的\“ constructor \”函数:
顺便说一句,其他两件事与您的答案没有直接关系,但对代码的修改可能非常有用。首先,使用冒号而不是句点来调用方法中的函数将使您可以在方法内部使用\“ self \”关键字,例如:
然后
其次,您实际上可以将显示对象用作表,而不必创建一个空表,然后将显示对象粘贴到该空表中:
请注意,如果执行此操作,则无法设置元表。我发现这种方法看起来更合乎逻辑,并且不希望自己使用元表,但这就是您的要求。
捐焦
琶竞捆栓
在您的调用代码中:
我已更改: 创建一个本地实例变量以允许在返回之前进行设置 设置metatable的更紧凑方法 在调用代码时为类使用变量