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

时间:2015-10-25 22:52:18

标签: lua corona

所以我在表格中有一个显示对象的集合,这样插入(一些多余的代码被取出):

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

因此,网格只是一个包含不同属性的矩形对象的表。但是,在代码的不同位置,我试图这样做:

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

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

1 个答案:

答案 0 :(得分:0)

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

if (grid[i]~=nil and grid[i].blockColor) then