Solar 2D(Lua)定义矩形变量报错,求原因及修复方案
报错原因
你代码里的核心问题是:声明了local rect_shape但未给它初始化任何值,此时它是Lua的nil值,Lua不允许对nil值进行索引操作(比如.w、.h这种属性访问)。另外你报错信息里的rect_enemy应该是笔误,实际是rect_shape的问题。
你之前的逻辑搞反了:试图给一个不存在的对象赋值属性,再用这些属性去创建对象——但nil根本没有属性可以赋值。
修复方案
有两种简洁的修复方式,任选其一即可:
方式1:用临时表暂存参数
先创建一个普通Lua表来存储宽高、坐标参数,再用这些参数创建矩形对象:
----------------------------------------------------------------------------------------- -- -- main.lua -- ----------------------------------------------------------------------------------------- -- Variable definition: local rect_params = {} -- 先初始化空表存储参数 -- Initialization rect_params.w = 20 rect_params.h = 40 rect_params.x = (display.contentWidth/2)-(rect_params.w/2) rect_params.y = (display.contentHeight/2)-(rect_params.h/2) local rect_shape = display.newRect(rect_params.x, rect_params.y, rect_params.w, rect_params.h) rect_shape:setFillColor(49/255, 49/255, 49/255) -- Solar2D的setFillColor默认用0-1范围,0-255值需除以255 print("value of rect_shape:", rect_shape, "value of w:", rect_shape.width, "value of h:", rect_shape.height, "value of x:", rect_shape.x, "value of y:", rect_shape.y)
方式2:直接计算参数(更简洁)
不需要临时表,直接计算坐标后创建矩形,Solar2D的display.newRect返回的显示对象自带width、height、x、y属性,直接访问即可:
----------------------------------------------------------------------------------------- -- -- main.lua -- ----------------------------------------------------------------------------------------- local rect_w = 20 local rect_h = 40 local rect_x = (display.contentWidth - rect_w) / 2 local rect_y = (display.contentHeight - rect_h) / 2 local rect_shape = display.newRect(rect_x, rect_y, rect_w, rect_h) rect_shape:setFillColor(49/255, 49/255, 49/255) print("value of rect_shape:", rect_shape, "value of w:", rect_shape.width, "value of h:", rect_shape.height, "value of x:", rect_shape.x, "value of y:", rect_shape.y)
额外注意点
- Solar2D的
setFillColor默认接受0到1之间的浮点值,若使用0-255的RGB值,必须除以255,否则颜色会显示成全白(255会被截断为最大值1)。 - 你之前
print里访问rect_shape.w是错误的,Solar2D显示对象的宽高属性是width和height,不是w和h。
内容的提问来源于stack exchange,提问作者Kaj van Veen
相关产品推荐
相关产品推荐

