尝试全局访问'creatureBody'-空值

我正在尝试将我的信息封装在一个变量中,但在我的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循环中创建身体时更改颜色的那一行有问题。谢谢帮忙!

点赞
用户4567755
用户4567755

正如您的错误消息所说:“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 参考手册 §3.4.9

2019-05-07 12:02:34