无法在表格中的显示对象上使用setFillColor方法。

我在一个表格里有一堆显示对象,像这样插入(一些多余的代码已删除):

for i=1,blockCount do
    local block=display.newRect(xcoord,ycoord,blockwidth,blockheight);
    local color=blocks[i];
    if(color=="red") then
        block:setFillColor(1,0,0);
        block.collision = redHit;
        block:addEventListener( "collision",block);
    elseif(color=="blue") then
        block:setFillColor(0,0,1);
        block.collision = blueHit;
        block:addEventListener( "collision",block);
        block.hp=0;
    elseif(color=="yellow") then
        block:setFillColor(1,1,0);
        block.collision = yellowHit;
        block:addEventListener( "collision",block);
    else
    end
    block.blockColor=color;
    grid[i]=block;
end

表格 grid 中存放着不同属性的矩形对象。但在代码的其他位置,我尝试这样做:

for i=1,blockCount do
    if (grid[i]~=nil) then
        local color=grid[i].blockColor;
        if (color=="blue") then
            grid[i]:setFillColor(1,0,0);
            grid[i].collision = redHit;
            grid[i].blockColor="red";
        elseif (color=="red") then
            grid[i]:setFillColor(0,0,1);
            grid[i].collision = blueHit;
            grid[i].blockColor="blue";
            grid[i].hp=0;
        end
    end
end

换句话说,在代码的这个位置,我试图将所有红色块变成蓝色,将所有蓝色块变成红色。但它会抛出一个错误,说它无法更改填充颜色(说它是一个 nil 值)。因为运行到这里,通过查看其颜色,它正在从对象中提取信息,因此它能够访问对象的属性和函数,如果我注释掉那行,更改其他属性也能工作。为什么它无法运行这个简单的函数呢?

点赞
用户1925928
用户1925928

这意味着你的网格表格不仅仅包含块元素。因此,存储在网格表中的某个元素不包含”.blockColor"。 将其更改为:

if (grid[i] ~= nil and grid[i].blockColor) then
2015-10-29 14:38:37