所以我在表格中有一个显示对象的集合,这样插入(一些多余的代码被取出):
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
换句话说,在代码中的这个位置,我试图将所有红色块都设置为蓝色,将所有蓝色块设置为红色。但它抛出一个错误,它无法改变填充颜色(说它是一个零值)。因为它到达那里,它通过查看对象的颜色从对象中提取信息,因此它无法访问对象的属性和功能,如果我注释掉该行,则更改其他属性。为什么它不能运行这个简单的函数?
答案 0 :(得分:0)
这意味着您的网格表不仅包含块元素。因此,存储在网格表中的一个元素不包含“.blockColor”。 将其更改为:
if (grid[i]~=nil and grid[i].blockColor) then