【问题标题】:Attempt to global 'creatureBody' - Nil Value尝试全局 'creatureBody' - Nil 值
【发布时间】:2019-09-23 14:20:30
【问题描述】:

我正在尝试将我的信息封装在一个变量中,但在我的 Corona 文件中工作时遇到了困难。

我已经删除了改变颜色的线,但我仍然遇到某种功能错误

function CreateBeast(parent, hasParent)
    hugWall = math.random(4); -- 1 left, 2 top, 3 right, 4 bottom
    red = math.random(255);
    green = math.random(255);
    blue = math.random(255);
    if hugWall == 1 then
        xCoordinates = 0 + radiusCircle;
        yCoordinates = math.random(480);
    elseif hugWall == 2 then
        xCoordinates = math.random(320);
        yCoordinates = 480 - radiusCircle;
    elseif hugWall == 3 then
        xCoordinates = 320 - radiusCircle;
        yCoordinates = math.random(480);
    elseif hugWall == 4 then
        xCoordinates = math.random(320);
        yCoordinates = 0 + radiusCircle;
    end
    if hasParent == 1 then
        creature = 
        {
            creatureTitle = parent.creatureTitle;
            size =  parent.size;
            speed = parent.speed;
            x = xCoordinates;
            y = yCoordinates;
            creatureBody = display.newCircle(xCoordinates, yCoordinates, radiusCircle);
            creatureBody:setFillColor(parent);
        }
    else
        creature =
        {
            creatureTitle = creatureIterator;
            creatureIterator = creatureIterator + 1;
            size = 1;
            speed = 1;
            x = xCoordinates;
            y = yCoordinates;
            creatureBody = display.newCircle(xCoordinates, yCoordinates, radiusCircle);
            creatureBody:setFillColor(red, green, blue);
        }
    end
    return creature
end

creatureArray = {}; 
for i = 0, starterNumOfCreatures , 1
do
    creature = CreateBeast(0,0);
    creatureArray[i] = creature;

end

它不断抛出试图访问全局变量的错误。在 for 循环中创建主体颜色时,它特别有一个问题。感谢您的帮助!

【问题讨论】:

  • 实际的完整错误消息是什么(全文、行号...)?
  • 您在两个表构造函数中引用creatureBody 而不将其定义为变量。也许您打算在定义 creature 之后调用该方法?
  • 四循环制作时setFillColor有问题。

标签: lua coronasdk


【解决方案1】:

正如您的错误消息所说:creatureBody 是 nil,您正在尝试调用它。你不能那样做。考虑一下您的代码片段:

if hasParent == 1 then
    creature = 
    {
        creatureTitle = parent.creatureTitle;
        size =  parent.size;
        speed = parent.speed;
        x = xCoordinates;
        y = yCoordinates;
        creatureBody = display.newCircle(xCoordinates, yCoordinates, radiusCircle);
        creatureBody:setFillColor(parent);
    }
else
    creature =
    {
        creatureTitle = creatureIterator;
        creatureIterator = creatureIterator + 1;
        size = 1;
        speed = 1;
        x = xCoordinates;
        y = yCoordinates;
        creatureBody = display.newCircle(xCoordinates, yCoordinates, radiusCircle);
        creatureBody:setFillColor(red, green, blue);
    }
end

当您调用setFillColor 时,在本地或全局范围内没有可用的creatureBody,这是预期的,因为它没有在提供的代码中的任何地方定义。

您可以通过例如修复它移出圆形构造函数调用:

local creatureBody = display.newCircle(xCoordinates, yCoordinates, radiusCircle)
creature =
{
    creatureTitle = creatureIterator;
    creatureIterator = creatureIterator + 1;
    size = 1;
    speed = 1;
    x = xCoordinates;
    y = yCoordinates;
    creatureBody = creatureBody;
    body:setFillColor(red, green, blue);
}

请注意setFillColor 的返回值将被插入creature。这真的让我想知道这是否是理想的行为。

如果您无法理解为什么creatureBody 不可用或为什么setFillColor 返回将被插入到creature 中,请参考Lua Reference Manual §3.4.9。

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2019-08-21
    • 2021-08-04
    • 2018-07-11
    • 2019-06-13
    • 2014-05-06
    • 1970-01-01
    • 2015-05-09
    • 2014-11-05
    相关资源
    最近更新 更多