gpt4 book ai didi

iphone - Corona LUA 和 OOP 设计

转载 作者:行者123 更新时间:2023-12-03 18:38:18 25 4
gpt4 key购买 nike

所以我来自使用 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)

这非常有效,让我在编写武器时可以使用“私有(private)”和“公共(public)”心态。问题是,如果我希望玩家和对手都有一个设定:

local playerWeapon = require("weaponCanon")
local opponentWeapon = require("weaponCanon")

这只是返回同一个对象,而不是该对象的新实例。所以我只能在对手武器位置获得一把武器Canon。这显然是我现在想要/需要的。

我们的游戏中有很多武器,如果每个文件只有一个版本,并且有一个设置告诉我们它是对手武器还是玩家武器,那就太好了。另一种方法是复制每个文件并创建 WeaponPlayerCanon 和 WeaponOpponentCanon,但一想到修改一个文件并且每次都必须更改 2 个以上文件,我就感到畏缩。

如何让它返回一个实例以及执行此操作的 LUA 文件的结构是什么?

谢谢或任何及所有帮助

-d

最佳答案

如果稍后您开始需要继承(即 LaserCannon 是 Weapon 的子类),您可能需要更深入地使用元表。

有很多库可以让你“在 Lua 之上进行 oop”。您可以在这里看到一个非常好的列表:

http://lua-users.org/wiki/ObjectOrientedProgramming

我是 middleclass 的作者。使用我的库,您必须执行以下操作:

local Weapon = class('Weapon')

function Weapon:initialize(a,b,c)
self.x,self.y,self.z = a,b,c
end

function Weapon:fire(x,y)
...
end

LaserCannon 很容易实现 - 您只需将第二个参数传递给类即可:

local LaserCannon = class('LaserCannon', Weapon)

function LaserCannon:initialize(a,b,c,d)
self.w = d
Weapon.initialize(self, a,b,c) -- superclass' constructor
end

function LaserCannon:foo()
...
end

你可以这样使用它:

require 'middleclass' -- so you can use "class"
LaserCannon = require 'laser_cannon'

local playerWeapon = LaserCannon:new() -- a laser
local opponentWeapon = Weapon:new() -- a regular generic weapon

opponentWeapon:fire(100,200) -- typical use
playerWeapon:fire(100, 200) -- LaserCannon inherits fire from Weapon
playerWeapon:foo() -- LaserCannon-exclusive

这是针对中间类的,这是我更喜欢的,因为我做到了。我之前提到的页面上的其他库也提供类似的功能。

关于iphone - Corona LUA 和 OOP 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6345365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com