1

私は C# を使用して Unity3D で作業しており、ゲーム用の非常に単純なファイル マネージャーに取り組んでいます。ファイル/フォルダーに対して実行できる簡単な操作があります。そのうちの1つは「切り取り」です(後で「コピー」することもできます)。

何が起こっているかをよりよく想像するために:

ここに画像の説明を入力

コピーして貼り付けるには、カスタムが必要Clipboardです。Stackaと aで実装する 2 つのデータ構造を考えました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 に答える