local background = display.newImage("black.png", 0, 0)
local submit = display.newImage("submit.png")
submit.x = display.contentWidth/2
submit.y = display.contentHeight-100
local nameInstructions = display.newText("Enter your name", 10, 50, native.systemFont, 24)
local usersName = native.newTextField(10, 100, 350, 50)
usersName.inputType = "default"
local function keyboardListener (event)
native.setKeyboardFocus(nil)
end
background:addEventListener("tap", keyboardListener)
local function reverseName(event)
reverseUsersName = string.reverse(usersName)
end
submit:addEventListener("tap", reverseName)
local reverse = display.newText(reverseUsersName)
reverse.x = display.contentWidth/2
reverse.y = display.contentHeight/2
每次使用我的Corona SDK操作时,我都会得到这个:
Bad argument #-1 to 'newText' (string expected, got nil)
stack traceback:
[C]: ?
[C]: in function 'newText'
...Corona Projects/Assignment 4.3/main.lua/src/main.lua:24: in main chunk
答案 0 :(得分:0)
reverseName在本地函数reverseName(event)中,但是一旦按下或点击提交,就会调用此函数。但是,在点击sumbit之前,会调用local reverse = display.newText(reverseUsersName)。这就是为什么它给你错误。
答案 1 :(得分:0)
第24行访问reverseUsersName
的唯一位置是 函数reverseName(event)
。在此函数中,reverseUsersName
是全局的,所以在函数运行一次之后,该变量可以从脚本的其他部分访问,但在此之前,它不存在。
现在在第22行中,您已将reverseName
注册为“tap”事件的事件侦听器,但事件仅在脚本执行一次后生成(并且在调用脚本回调之间,如reverseName和keyboardListener)是回调),所以当您刚刚创建显示文本时,该变量尚不存在。
因此,您需要更新reverse
侦听器中reverseName
显示项的文本,以便每次单击按钮时,反转的名称都会显示。因此,您必须在 reverse
函数上声明reverseName
变量,以便它可以作为upvalue(阅读Corona入门文档,它们非常出色)并在该功能中讨论这个微妙的问题。并且可能您希望初始化显示usersName而不是反向。
所以你需要像
这样的东西local reverse = display.newText(usersName)
local function reverseName(event)
reverseUsersName = string.reverse(usersName)
reverse.SetText(reverseUserName)
end
submit:addEventListener("tap", reverseName)
请注意,如果您希望每次按水龙头时都显示显示字符串,而不是仅在您第一次按下时,则必须使用
local function reverseName(event)
reverseUsersName = string.reverse(reverseUsersName)
reverse.SetText(reverseUserName)
end
reverseUsersName = usersName
答案 2 :(得分:0)
使用以下代码检查您的函数reverseName
和文本对象(reverse
):
local reverse --[[ Initialize the object with a global scope,
so you can access it anywhere from the page. --]]
local function reverseName(event)
--[[ In the below line, usersName is a table value. It is the reason
of the error. For getting the string from the text field, you
have to provide 'usersName.text' --]]
reverseUsersName = string.reverse(usersName.text)
reverse.text = reverseUsersName -- Assign the text field value to your text object
end
submit:addEventListener("tap", reverseName)
reverse = display.newText("",20,20,nil,20) --see the parameters of display.newText()*
reverse.x = display.contentWidth/2
reverse.y = display.contentHeight/2
* Corona API:display.newText()