2013-03-09 10 views
1

목표 : I은 이미 존재하는 라이브러리 (미로 발생기)에 추가하고 있어요[X] [Y]

. 내가 뭘 하려는지 미로를 (메모리에 부분적으로 하드 디스크에) 저장하는 새로운 방법을 정의하는 것입니다.

질문을 보려면 질문 단락을 건너 뛰십시오. 완전히 다른 접근법을 제안 할 수도 있기 때문에 몇 가지 추가 정보를 추가했습니다.

현재 상황 : (메모리) 미로 생성기를 저장 미로는지도 함께

현재의 방법. 맵에는 미로의 픽셀 행이 각각 포함 된 InnerMapArrays가 포함되어 있습니다. 상의 올바른 배열이어서 (X)

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

는 [y]가 호출을 반환하는 방법이있을지도 클래스

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

: 승점이 같은 미로에 기입/판독 할 수있다 innerData는 궁극적으로 올바른 픽셀을 반환하는 유사한 메서드도 포함합니다.

문제 :

내가 메모리와 디스크에 미로의 부분에 미로의 일부를 저장하는 새로운지도 유형을 생성한다 수행 할 작업으로 돌아 간다. 예를 들어 라인이 아닌 100x100 픽셀 세트로 미로 영역을로드하려고합니다.

Red square is the part that should currently be loaded in the memory

지도/InnerMapArray 구조의 현재의 구현이 허용되지 않음을 (픽셀 X = 50, Y 50는, 예를 들어 변경 = 때 적색 부분 아래 이미지에로드한다). 내가 원했던 것은 한 가지 방법으로 전달 된 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# 컴파일러가이를 허용하지 않습니다. 누구든지이 문제를 '좋은'방식으로 해결할 수있는 단서가 있습니까? 당신이 원하는 것을 달성하기 위해

답변

2

방법은 다음과 같습니다이 같은 "더블"인덱서는 물론 드 기본 클래스에서 오버라이드 (override) 할 필요가있는 경우

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

이 코드는 작동합니다. 희망이 도움 :

+0

이것은 해결책이 될 수도, 그것은 여전히 ​​기존의 코드의 기본 클래스를 편집해야 의미합니다. 원래 내가하지 않기로 계획 한 것. 이것이 유일한 방법이라면 나는 그것이 내가해야 할 일이라고 생각한다. – Devedse

+0

나는 당신의 솔루션을 사용하기로 결정했고, 현재의 솔루션에 비해 실제로 성능이 향상되었다. 도와 주셔서 감사합니다 :). – Devedse

+0

언제든지 환영합니다. P. – ecampver