1

ゴール:

私は現在、既存のライブラリ (迷路ジェネレーター) への追加に取り組んでいます。私がやろうとしているのは、迷路を保存する新しい方法を定義することです (一部はメモリに、一部はハードディスクに)。

-質問だけを見たい場合は、問題の段落にスキップしてください。まったく別のアプローチを提案する可能性があるため、追加情報を追加しました。

現在の状況:

迷路ジェネレーターが迷路を (メモリに) 格納する現在の方法は、マップを使用することです。Map には、それぞれが迷路内のピクセルの行を含む一連の InnerMapArrays が含まれています。ポイントは、次のように迷路で読み書きできます。

… //Code that creates maze map
map[x][y] = true;

Map クラスには、正しい配列 (x) を返すメソッドがあります。

public override InnerMapArray this[int x]
{
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    get
    {
        return innerData[x];
    }
}

次に、同様のメソッドを含む innerData で [y] を呼び出して、最終的に正しいピクセルを返します。

問題:

やりたいことに戻ると、迷路の一部をメモリに保存し、迷路の一部をディスクに保存する新しい Map タイプを作成します。たとえば、行ごとではなく、100x100 ピクセルのセットで迷路の領域をロードしたい。(下の画像では、例えばピクセル x=50,y=50 を変更すると赤い部分が読み込まれます)

赤い四角は、現在メモリにロードする必要がある部分です

Map/InnerMapArray 構造体の現在の実装では、これが許可されていません。私が欲しいのは、1 つのメソッドで渡される X と Y を実際に取得する方法です。おそらくうまくいくと思ったのは次のとおりです(動作しないコード)

public override InnerMapArray this[int x][int y]
{
    get
    {
        //load a certain 100x100 part of the maze in memory and set it as current
        //so while generating the maze pixels near the currently generated/read pixel
        //can be read really fast while others far away won't use any memory
    }
}

残念ながら、C# コンパイラはこれを許可していません。この問題を「いい」方法で解決するのに役立つ手がかりを誰かが持っていますか?

4

1 に答える 1

2

あなたが望むものを達成する方法は次のとおりです。

public overrride InnerMapArray this[int x, int y] { ... }

もちろん、このコードは、このような「ダブル」インデクサーが基本クラスでオーバーライドされる場合にのみ機能します。お役に立てれば :)

于 2013-03-09T02:35:29.377 に答える