我试图让用户的名字在垂直方向上一次丢失一个字母。示例:Adam" A"会在1秒后出现," d"在显示的A下3秒后出现," a"在显示的d下5秒后出现," m"在显示的a下7秒后出现。视觉效果会有一种多米诺骨牌效应。当它们出现时,它们会一直显示在屏幕上。
如果我注释掉userNameField:removeSelf(),那么代码工作正常。我得到了我想要的效果,但问题是我仍然显示了userNamefield。
如果您需要查看更多代码,请与我们联系。
local greeting = display.newText( "Greetings, enter your name",0,0,native.systemFont, 20 )
greeting.x = display.contentWidth/2
greeting.y = 100
local submitButton = display.newImage( "submit.png" ,display.contentWidth/2, display.contentHeight - 50 )
local userNameField = native.newTextField( display.contentWidth * 0.5 , 150, 250, 45)
userNameField.inputtype = "defualt"
local incrementor = 0
function showNameLetters()
userNameField:removeSelf( )
if incrementor <= string.len ("userNameField.text") then
incrementor = incrementor + 1
personLetters = string.sub (userNameField.text, incrementor,incrementor)
display_personLetters = display.newText (personLetters, 290,30*incrementor, native.systemFont, 30)
display_personLetters.alpha = 0
transition.to(display_personLetters,{time = 3000, alpha = 1, onComplete = showNameLetters})
end
end
更新
通过在我的函数中添加userNameField.isVisible = false,我找到了解决问题的方法。
我也发现了一些非常奇怪的东西,并希望有人解释为什么会这样。如果我添加问候语:removeSelf()和submitButton:removeSelf()(我已经在下面的代码中对它们进行了评论,以显示我将它们放在哪里进行测试)。我得到了奇怪的结果,只有第一个字母淡入。如果我设置greeting.isVisible = false和submitButton.isVisible = false。代码工作正常。
我很困惑为什么对象:removeSelf()不会工作。有人可以帮我解决这个问题。
也就是说,如果我替换以下行:
userNameField:removeSelf( )
使用:
userNameField.isVisible = false
然后该应用程序工作正常。请建议我为什么/任何问题的解决方案。提前谢谢......
答案 0 :(得分:1)
您似乎多次调用 showNameLetters ,这意味着您要多次删除本机文本字段。没有它,并在删除它之前检查nil:
if userNameField ~= nil then
userNameField:removeSelf()
userNameField = nil
end
答案 1 :(得分:0)
它显示您在删除后使用userNameField中的数据(在下面的行中):
personLetters = string.sub (userNameField.text, incrementor,incrementor)
除了你一次又一次地呼叫object:removeSelf()
而不检查它的存在(如hades2510所述)。因此,在删除userNameField
之前,请检查它是否存在:
if userNameField ~= nil then
userNameField:removeSelf()
userNameField = nil
end
当userNameField为nil时,你不会获得userNameField.text
。因此,使用临时变量来保存先前的userNameField.text
,并在需要时从该变量中获取保存的数据。
额外注意事项:您确定,您必须检查以下行中的文字"userNameField.text"
或变量userNameField.text
的长度吗?如果你必须使用文本字段中的数据,那么这也很重要。
if incrementor <= string.len ("userNameField.text") then
........
end
保持编码.......................:)