3

ゲーム エンジンのスクリプティング レイヤーに取り組んでいます。現在、スクリプトをクラスとして使用して、new という名前の「テーブル」にメソッドを追加しています。この関数は、基本的にクラスのインスタンス化されたコピーを作成しました。スクリプトのインスタンスが必要な場合は、C API からこの関数を呼び出します。

function PlayerController:new(o)
    print('A new instance of the PlayerController has been created');

    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

私の質問は次のとおりです。上記の Lua コードを C に移動して、このシステム用に作成するすべてのスクリプト ファイルに追加する必要がないようにするにはどうすればよいですか?

4

1 に答える 1

0

これを行うために、クラス宣言関数を作成することをお勧めします。完全な「helper.lua」ファイルは次のとおりです。

local lib = {type = 'helper'}
local CALL_TO_NEW = {__call = function(lib, ...) return lib.new(...) end}

function lib.class(class_name, tbl)
  local lib = tbl or {}
  lib.type = class_name
  lib.__index = lib

  -- Default "new" method
  function lib.new()
    return setmetatable({}, lib)
  end

  -- Enable foo.Bar() instead of foo.Bar.new()
  return setmetatable(lib, CALL_TO_NEW)
end
return lib

使用例:

local helper = require 'helper'
local lib = helper.class 'foo.Bar'

-- optional new function if there needs to be some argument handling
function lib.new(args)
  local self = {}
  -- ...
  return setmetatable(self, lib)
end

return lib

lub.class

これは、現実世界の最小限のクラス宣言およびセットアップ システムです。xml、yaml、dub などの多くの luarocks で使用されています。

于 2014-08-15T06:36:02.887 に答える