Попытка глобального 'creatureBody' - Nil Value - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь инкапсулировать мою информацию в одну переменную, и мне тяжело работать с моим файлом 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. Спасибо за помощь!

1 Ответ

0 голосов
/ 07 мая 2019

Как говорится в вашем сообщении об ошибке: 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.Это действительно заставляет меня задаться вопросом, является ли это желаемым поведением.

Пожалуйста, обратитесь к Справочному руководству Lua §3.4.9 , если у вас есть проблемы с пониманием, почему creatureBody недоступен или почему setFillColorвозврат будет вставлен в creature.

...