1

我正在使用 C# 在 Unity3D 中工作,并为我的游戏开发一个非常简单的文件管理器。您可以对文件/文件夹执行一些简单的操作,其中之一是“剪切”(以后可能还有“复制”)

为了更好地想象正在发生的事情:

在此处输入图像描述

对于复制和粘贴,我需要一个自定义Clipboard. 我想到了两个数据结构来实现它, aStack和 a Queue。堆栈的问题在于,如果我剪切“a”、“b”和“c”,它们将被反向粘贴,LIFO。所以我认为排队更好。

public class Clipboard<T>
{
    private SLLQueue<T> queue; // SLL stands for SinglyLinkedList, the queue is implemented that way...

    public Clipboard()
    {
        queue = new SLLQueue<T>();
    }

    public void Add(T data)
    {
        queue.Clear();
        Append(data);
    }

    public void Add(T[] data)
    {
        queue.Clear();
        foreach (var d in data)
            Append(d);
    }

    private void Append(T data)
    {
        queue.Push(data);
    }

    public T[] Clear()
    {
        int len = queue.Count;
        var data = new T[len];
        for (int i = 0; i < len; i++)
        {
            data[i] = queue.Pop();
        }
        return data;
    }
}

这够好吗?- 这是正确的数据结构吗?- 我是否以正确的方式实施剪贴板的操作?

非常感谢你的帮助。

编辑:我没有查看系统的剪贴板。

编辑:我使用了队列实现,这里是剪贴板的工作方式。

    public void CutSelection()
    {
        // if there's already something cut, change its fade/alpha back to normal
        var clipContents = fileManager.Clipboard.Clear();
        foreach (var c in clipContents)
            c.Icon.alpha = 1f;

        // adds all the currently selected items to the clip
        fileManager.Clipboard.Add(Selection);

        // cut their alpha to half
        foreach (var s in Selection)
            s.Icon.alpha = CUT_ALPHA;
    }

public void Paste()
{
     // clear the clip / get the content inside it, get their alpha back to full and move them to the current folder
    var clipContents = Clipboard.Clear();
    if (clipContents != null) {
        for (int i = 0, len = clipContents.Length; i < len; i++) {
            clipContents[i].Icon.alpha = 1;
            clipContents[i].MoveTo(currentFolder);
        }
    }
}
4

1 回答 1

-1

使用剪贴板类。这是一个使用它添加和检索数据的示例。

于 2013-09-03T04:53:24.620 回答