【问题标题】:Corona SDK: Display text object has text and is visible, but width is nilCorona SDK:显示文本对象有文本并且可见,但宽度为零
【发布时间】:2026-01-03 08:55:01
【问题描述】:

我正在尝试创建一个文本显示,但由于某种原因,对象的宽度为零,尽管它有文本。这是我的代码:

文件1.lua:

local myTextDisplay = display.newText("2", display.contentWidth / 2, display.contentHeight / 2, native.systemFontBold)

文件2.lua:

local myTextDisplay = File1:getTextDisplay() --function in File1.lua that returns myTextDisplay
print("Displayed text: " .. myTextDisplay.text)
if myTextDisplay.isVisible then print("Text display is visible") end
print("Text display width: " .. myTextDisplay.width)

我第一次打开 File2 场景时,它工作正常,并且打印出来:

Displayed text: 2
Text display is visible
Text display width: 10.6599...

但是,当我第二次打开同一个场景时(它没有被回收),最后一个打印语句会导致运行时错误:

Displayed text: 2
Text display is visible
Runtime error
C:\....myGame.lua:20: attempt to concatenate field 'width' (a nil value)

这怎么可能?如果显示对象包含文本,它怎么可能有零宽度?这是否与每次打开未回收的 File2 场景时都获得相同的显示对象有关?任何建议表示赞赏!

【问题讨论】:

  • 对象的文本只是一个属性。与宽度相同。您确实可以在具有 nil 宽度的同时拥有文本。问题是为什么宽度为零。我认为您应该提供更多代码。尤其是从 file1 到 file2 的部分。

标签: mobile lua coronasdk displayobject


【解决方案1】:

我无法解决最初的问题,但我认为在场景之间传递显示对象可能存在一些固有问题,尤其是在回收一个场景时。

相反,我发现最好的解决方法是简单地使用两个显示对象,每个场景中一个。然后我将对象的文本和其他属性从第一个场景传递到第二个场景,并创建与第一个相同的第二个显示对象。

在场景之间传递数据似乎比传递显示对象更顺畅。

【讨论】: