Ошибка совместимости строк, попытка индексировать нулевое значение
Я использую Gideros и получаю эту ошибку:
main.lua:47: attempt to index a nil value
stack traceback:
main.lua:47: in function 'func'
[string "compatibility.lua"]:36: in function <[string "compatibility.lua"]:35>
У меня есть этот кусок кода, и как только текст отображается, он дает мне вышеупомянутую ошибку: Как я могу это исправить?
function onEnter()
function youLoose()
local font2 = TTFont.new("billo.ttf", 20, "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
LooserText = TextField.new(font2, "You Loose , Try AGAIN?")
LooserText:setPosition(100, 100)
stage:addChild(LooserText)
Timer = Timer.delayedCall(1000, removing)
end --line 36
end
function removing()
LooserText:getParent():removeChild(LooserText) --line 47
end
2 ответа
index nil
ошибка означает, что на этой линии вы, вероятно, получаете nil
как возвращаемое значение из LooserText:getParent()
,
Почему вы будете получать nil
за это я не могу сказать вам ничего, кроме предположительно, потому что у него его нет.
Документация указывает на то, что нет условия ошибки для Stage.addChild
за исключением того, что добавляемый объект должен быть Sprite. TextField
наследует Sprite, поэтому у вас нет видимой причины для получения этой ошибки. Тем не менее, вы не должны переназначать возвращаемое значение delayedCall
к глобальной переменной с тем же именем, что и Timer
класс, это может повлиять на другие части приложения. Так как вы не используете возвращенный Timer
Например, я удалил назначение. Кроме того, если stage:addChild
удалось тогда removing
можешь использовать stage
, Одна странная вещь в том, что ваш onEnter
просто определяет youLose()
но не вызывает и не возвращает его, эта часть кода вы пропустили? В любом случае вам нужно добавить некоторые проверки работоспособности, чтобы убедиться, что то, что, по вашему мнению, происходит, действительно происходит без добавления / удаления дочерних элементов:
function onEnter()
function youLoose()
local font2 = TTFont.new("billo.ttf", 20, "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
LoserText = TextField.new(font2, "You Lose , Try AGAIN?")
LoserText:setPosition(100, 100)
print('Stage num children:' .. stage:getNumChildren())
stage:addChild(LoserText)
print('Stage num children:' .. stage:getNumChildren())
print('LoserText is stage child #' .. stage:getChildIndex(LoserText))
Timer.delayedCall(1000, removing)
end
end
function removing()
print('Stage num children:' .. stage:getNumChildren())
print('LoserText is stage child #' .. stage:getChildIndex(LoserText))
stage:removeChild(LoserText)
print('Stage num children:' .. stage:getNumChildren())
end