【问题标题】:How would i replicate an 'undo' (ctrl + z) function in roblox lua?我将如何在 roblox lua 中复制“撤消”(ctrl + z)功能?
【发布时间】:2019-09-06 15:42:51
【问题描述】:

我一直在尝试创建一个通常在文本编辑器和程序中具有的“撤消”功能。我已经做了某种“撤消”功能,但它一次只删除 1 个字母,这不是我的目标。我想要一次删除整个单词的东西。

我在 TextBox 上使用了GetPropertyChangedSignal,我在其中输入了文本并将字符串存储在其中,然后每当玩家按下 ctrl + z 时,我首先将文本框的文本设置为表格的最后一个值,然后删除最后一个值。

这是我使用的代码(不准确,变量当然不同):

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.gsubstring.match%s+%w+)一次删除整个单词。

就我所知。非常感谢您的帮助。

【问题讨论】:

标签: lua roblox


【解决方案1】:

存储动作列表。为了撤消,恢复上一个动作,重做重复它们。 如果您只想撤消单词级别的操作,请随意合并构成单词的操作。

H -> append "H"
He -> append "e"
Hel -> append "l"
Helli -> append "i"
Hell -> removeLast "i"
Hello -> append " "
Hello -> append "o"
Hello W -> append "W"

如果可以移动光标,您还需要在必须存储位置的位置插入操作。

另一种解决方案是将任何新单词存储在表格中。

{"H"}
{"He"}
{"Hel"}
{"Hell"}
{"Hello"}
{"Hello", " "}
{"Hello", " ", "w"}
{"Hello", " ", "wo"}
{"Hello", " ", "wol"}
{"Hello", " ", "wo"}
{"Hello", " ", "wor"}
{"Hello", " ", "worl"}
{"Hello", " ", "world"}

为空白字符和非空白字符之间的每次切换启动/添加一个新项目。要撤消输入的最后一个单词,请将其从列表中删除。 如果要撤消删除,则必须保留第二个副本以恢复到。

您还可以实现链接列表或诸如此类的东西。这可以变得任意复杂。

【讨论】:

  • 是的,这对我来说太高级了。我一次只坚持 1 个字母。
猜你喜欢
  • 2011-05-11
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2017-03-21
  • 2015-11-25
  • 1970-01-01
  • 2017-11-30
相关资源
最近更新 更多