我如何在 roblox lua 中复制 'undo' (ctrl + z) 函数?
How would i replicate an 'undo' (ctrl + z) function in roblox lua?
我一直在尝试制作文本编辑器和程序中通常具有的 'undo' 功能。我已经做了某种 'undo' 函数,但它一次只删除 1 个字母,这不是我的目标。我想要一次删除整个单词的东西。
我在 TextBox 上使用了 GetPropertyChangedSignal
,我将文本输入其中并将字符串存储在其中,然后每当玩家按下 ctrl + z 时,我首先将文本框的文本设置为table,然后删除最后一个值。
这是我使用的代码(不完全一样,变量当然不同):
local Tab = {};
Box:GetPropertyChangedSignal("Text"):Connect(function()
Tab[#Tab + 1] = Box.Text;
end);
game:service'Players'.LocalPlayer:GetMouse().KeyDown:Connect(function(key)
if key == "z" then -- i will add a ctrl check later.
Box.Text = #Tab > 0 and Tab[#Tab] or "";
Tab[#Tab] = nil;
end;
end);
正如我之前提到的,我希望它一次删除整个单词。
我正在考虑使用模式匹配(string.gsub
、string.match
、%s+
、%w+
)一次删除整个单词。
就我所知。将不胜感激。
存储操作列表。为了撤消,恢复最后的动作,重做重复它们。
如果您只想在单词级别撤消,请随意合并形成单词的操作。
H -> append "H"
He -> append "e"
Hel -> append "l"
Helli -> append "i"
Hell -> removeLast "i"
Hello -> append " "
Hello -> append "o"
Hello W -> append "W"
如果可以移动光标,您将需要插入操作,您还必须在其中存储位置。
另一个解决方案是将任何新单词存储在 table.
中
{"H"}
{"He"}
{"Hel"}
{"Hell"}
{"Hello"}
{"Hello", " "}
{"Hello", " ", "w"}
{"Hello", " ", "wo"}
{"Hello", " ", "wol"}
{"Hello", " ", "wo"}
{"Hello", " ", "wor"}
{"Hello", " ", "worl"}
{"Hello", " ", "world"}
Start/add 空白字符和非空白字符之间的每次切换都会产生一个新项目。要撤消输入的最后一个单词,请将其从列表中删除。
如果你想撤消删除,你必须保留第二个副本以恢复。
你也可以实现链表之类的。这可以变得任意复杂。
我一直在尝试制作文本编辑器和程序中通常具有的 'undo' 功能。我已经做了某种 'undo' 函数,但它一次只删除 1 个字母,这不是我的目标。我想要一次删除整个单词的东西。
我在 TextBox 上使用了 GetPropertyChangedSignal
,我将文本输入其中并将字符串存储在其中,然后每当玩家按下 ctrl + z 时,我首先将文本框的文本设置为table,然后删除最后一个值。
这是我使用的代码(不完全一样,变量当然不同):
local Tab = {};
Box:GetPropertyChangedSignal("Text"):Connect(function()
Tab[#Tab + 1] = Box.Text;
end);
game:service'Players'.LocalPlayer:GetMouse().KeyDown:Connect(function(key)
if key == "z" then -- i will add a ctrl check later.
Box.Text = #Tab > 0 and Tab[#Tab] or "";
Tab[#Tab] = nil;
end;
end);
正如我之前提到的,我希望它一次删除整个单词。
我正在考虑使用模式匹配(string.gsub
、string.match
、%s+
、%w+
)一次删除整个单词。
就我所知。将不胜感激。
存储操作列表。为了撤消,恢复最后的动作,重做重复它们。 如果您只想在单词级别撤消,请随意合并形成单词的操作。
H -> append "H"
He -> append "e"
Hel -> append "l"
Helli -> append "i"
Hell -> removeLast "i"
Hello -> append " "
Hello -> append "o"
Hello W -> append "W"
如果可以移动光标,您将需要插入操作,您还必须在其中存储位置。
另一个解决方案是将任何新单词存储在 table.
中{"H"}
{"He"}
{"Hel"}
{"Hell"}
{"Hello"}
{"Hello", " "}
{"Hello", " ", "w"}
{"Hello", " ", "wo"}
{"Hello", " ", "wol"}
{"Hello", " ", "wo"}
{"Hello", " ", "wor"}
{"Hello", " ", "worl"}
{"Hello", " ", "world"}
Start/add 空白字符和非空白字符之间的每次切换都会产生一个新项目。要撤消输入的最后一个单词,请将其从列表中删除。 如果你想撤消删除,你必须保留第二个副本以恢复。
你也可以实现链表之类的。这可以变得任意复杂。