我已經環顧四周了幾個小時,但仍然找不到有用的答案,所以我決定在這里問 - 我應該如何撰寫一個按鈕來逐個洗掉基本計算器中的數字?
到目前為止,這是我的腳本!:https : //pastebin.com/xLj2iCHU
func _on_BDeleteDigit_pressed():
var numberAdded
var numberBefore = $NumberStuffs.get_text()
numberAdded = numberAdded.length() - 1
numberAdded[numberBefore]=("")
$Outputlabel.set_text(str(numberAdded))
這也是按下洗掉按鈕時的錯誤:https : //i.stack.imgur.com/8OJTI.png
我想知道如何讓這整個事情更優化/更短,但也許那是完全不同的問題,
uj5u.com熱心網友回復:
解釋錯誤
我將從錯誤開始。它說
基數“Nil”中不存在函式“length”
該錯誤告訴您,您正在嘗試呼叫一個函式length,該函式呼叫的是Nil,但Nil沒有呼叫的函式length。
問題是您正在嘗試呼叫Nil. 你想叫什么?length. 那是哪里呢?就是在這里:
numberAdded = numberAdded.length() - 1
所以,numberAdded是Nil。下一個問題是為什么。那么,讓我們看看numberAdded它的價值在哪里......
所以你在這里宣告:
var numberAdded
然后我們有這條與它無關的行:
var numberBefore = $NumberStuffs.get_text()
然后是錯誤行:
numberAdded = numberAdded.length() - 1
numberAdded.length()如果numberAdded沒有價值,您期望什么?當然這是一個錯誤。
順便說一句,代碼表明您希望numberAdded成為一個數字。這讓我想知道您對此有何期望:
numberAdded[numberBefore]=("")
是的,您可以在 C 或 C 中進行倒排索引,因為它只是添加指標。但不是 GDScript,你沒有。
我懷疑使用型別會幫助你。例如宣告numberAdded是這樣的整數:var numberAdded:int。是的,GDScript 有型別,使用它們。
如何洗掉最后一個字符
讓我參考您如何添加數字:
func _on_Button1_pressed():
var currentNumber = $NumberStuffs.get_text()
currentNumber = currentNumber "1"
$NumberStuffs.set_text(currentNumber)
好的,我們text在節點的屬性上存盤一個字串$NumberStuffs。我們通過連接來添加一個數字。
上面的代碼應該是等價的:
func _on_Button1_pressed():
$NumberStuffs.text = "1"
如果get_text和set_text是 GDScript 中的自定義函式,您可能需要查看setget.
因此,問題是如何洗掉 string 的最后一個字符。有幾種方法!
一種方法是使用erase:
func _on_BDeleteDigit_pressed():
var text := $NumberStuffs.text
var length := text.length()
text.erase(length - 1, 1)
$NumberStuffs.text = text
請注意,這erase是在修改字串,但字串是我們從讀取$NumberStuffs.text(或呼叫$NumberStuffs.get_text)中獲得的副本,這就是我們無論如何都需要設定為$NumberStuffs.text(或呼叫$NumberStuffs.set_text)的原因。
或者,如果您更喜歡:
func _on_BDeleteDigit_pressed():
var text := $NumberStuffs.get_text()
var length := text.length()
text.erase(length - 1, 1)
$NumberStuffs.set_text(text)
或者,我們可能會得到一個字串,它與我們擁有的字串相似,只是缺少最后一個字符。我們可以這樣做left(它可以讓您從左側獲取一部分字串,還有一個right函式可以從右側執行相同的操作):
func _on_BDeleteDigit_pressed():
var length := $NumberStuffs.text.length()
$NumberStuffs.text = $NumberStuffs.text.left(length - 1)
或者,如果您更喜歡:
func _on_BDeleteDigit_pressed():
var text := $NumberStuffs.get_text()
var length := text.length()
$NumberStuffs.set_text(text.left(length - 1))
一般來說,我們可以得到一個包含另一個字串的一部分的字串substr:
func _on_BDeleteDigit_pressed():
var length := $NumberStuffs.text.length()
$NumberStuffs.text = $NumberStuffs.text.substr(0, length - 1)
或者,如果您更喜歡:
func _on_BDeleteDigit_pressed():
var text := $NumberStuffs.get_text()
var length := text.length()
$NumberStuffs.set_text(text.substr(0, length - 1))
是的,您可以通過索引來修改字串,我相信這是您正在嘗試的。例如:
$NumberStuffs.text[-1] = "a"
這相當于:
var length := $NumberStuffs.text.length()
$NumberStuffs.text[length - 1] = "a"
這相當于:
var text := $NumberStuffs.get_text()
var length := text.length()
text[length - 1] = "a"
$NumberStuffs.set_text(text)
將用“a”替換最后一個字符。是的,你可以通過這樣做來洗掉。那將是:
$NumberStuffs.text[-1] = ""
這相當于:
var length := $NumberStuffs.text.length()
$NumberStuffs.text[length - 1] = ""
這相當于:
var text := $NumberStuffs.get_text()
var length := text.length()
text[length - 1] = ""
$NumberStuffs.set_text(text)
順便說一句,我:=在宣告變數的時候一直在使用。這宣告了我用來初始化它們的任何型別的變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381887.html
上一篇:防止按鈕在頁面加載時被自動點擊
