我如何在roblox lua中复制'撤消'(ctrl + z)函数?

问题描述 投票:0回答:1

我一直试图在文本编辑器和程序中创建一个“撤消”功能。我已经做了一些'撤消'功能,但它一次只删除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个回答
0
投票

存储操作列表。要撤消,请还原上一个操作,重做它们。如果您只想在单词级别撤消,请随意合并形成单词的操作。

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"}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.