2014-02-10 57 views
-2
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 

,我跑這用我的科羅娜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

爲什麼沒有upvotes或接受任何答案的接受?如果沒有用,可能是評論爲什麼或擴展問題。 – Schollii

回答

0

reverseName是在本地函數reverseName(事件),但一旦u按或調用此函數輕按提交。但是在你點擊sumbit之前調用local local = display.newText(reverseUsersName)。這就是爲什麼它給你錯誤。

0

在線24上訪問reverseUsersName的唯一地方是內部函數reverseName(event)。在這個函數中,reverseUsersName是全局的,所以之後的這個函數只運行一次,那個變量可以從腳本的其他部分訪問,但是在那之前它不存在。

現在在第22行中,您已將reverseName註冊爲「tap」事件的事件偵聽器,但事件僅在您的腳本執行過一次後生成(並且在調用腳本回調(如reverseName和keyboardListener) ,所以當你剛剛創建顯示文本時,該變量還不存在。

因此,您需要做的是更新reverseName偵聽器中reverse顯示項的文本,以便每次單擊該按鈕時都會顯示反向名稱。因此,您必須聲明reverse變量高於reverseName函數,以便在該函數中作爲upvalue(閱讀Corona入門文檔,它們非常出色並討論此細微差異)提供。大概你會想顯示用戶名而不是反向進行初始化。

所以,你會需要像

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

無論誰-1你可以按照SO的指導方針放置評論解釋爲什麼它是有害的,所以作者可以修復(如果沒有幫助,你不高興,但你不downvote你讓upvotes照顧顯示哪個答案是最有幫助的) 。 – Schollii

+0

你和krs的答案似乎是正確的。爲什麼downvoted !!!。 +1從我身邊。 – Thampuran

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 

*電暈API:display.newText()

+0

我不知道誰downvoted正確的答案! +1從我身邊。 – Thampuran

相關問題