main.lua:45行:尝试访问全局变量'heroClass'(一个空值)。堆栈回溯:main.lua:45行:在主块中。

我是新手,正在试图从子类heroClass创建一个新英雄。

CharacterClass.lua中的代码:

local CharacterClass =
{
 name = " ",
 hp = " ",
 velocity = " ";
}

function CharacterClass:new(o, nameCharacter, hpCharacter, velocityCharacter)
  local o = o or {}
  setmetatable(o, self)
  self.__index = self
  self.name = nameCharacter
  self.hp = hpCharacter
  self.velocity = velocityCharacter

  return o
end

-- 创建继承英雄

local heroClass = CharacterClass:new()
function heroClass:new(o, name, hp, velocity, playerId, color)
  local o = o or CharacterClass:new(o, name, hp, velocity)
  setmetatable(o, self)
  self.__index = self

  return o
end

main.lua中的代码:

local CharacterClass = require("CharacterClass")

local heroClassMain = heroClass:new()

当我运行该代码后,我得到以下错误:

main.lua:45: attempt to index global 'heroClass' (a nil value) stack traceback: main.lua:45: in main chunk

附:当我在main中创建NEW CharacterClass时,一切都很完美,但当我尝试创建NEW heroClass(子类)时,我会收到此错误! 有人知道是出了什么问题吗?谢谢!

点赞
用户1190388
用户1190388

将你的 CharacterClass.lua 修改如下:

local CharacterClass = {
  name = " ",
  hp = " ",
  velocity = " ",
}

function CharacterClass:new(o, nameCharacter, hpCharacter, velocityCharacter)
  -- 之前的代码保持不变
end

-- 创建一个英雄类继承基础类

local heroClass = CharacterClass:new()

function heroClass:new (o, name, hp, velocity, playerId, color)
  -- 之前的代码保持不变
end

return {heroClass = heroClass, CharacterClass = CharacterClass }

现在,在 main.lua 中使用 require 时,需要稍微多做一点事情:

local classModule = require "CharacterClass"
local CharacterClass, heroClass = classModule.CharacterClass, classModule.heroClass
local heroClassMian = heroClass:new()

之前,你的子类 heroClass 没有提供给 main.lua 文件。这就是导致错误 traceback 的原因。

2015-04-07 09:51:38