2012-12-19 2 views
1

위치 및 카메라 위치에 따라 텍스처를 이동하는 알고리즘을 구현하는 데 문제가 발생했습니다. 이미지의 처음 두 그림은 내가 성취하려고하는 것을 설명하지만 그에 맞게 이동하는 방법을 알 수는 없습니다. 나는 이것을 한 번에 한 번씩 프로그램을 만들었지 만, 나는 사라져 버렸습니다. 어떤 아이디어?C#/XNA 4.0- 무한 평면의 환상을주는 텍스처 이동

카메라가 도움이된다면 카메라/뷰포트의 너비와 높이가 텍스처의 너비와 높이와 같습니다. 목표는 무한한 비행기의 환영을 제공하면서 위치를 바꿀 수 있도록하는 것입니다. (교체 아웃, 롤, 무한면을 그릴 필요로.)

The first two examples:

답변

-1

몇 시간의 시행 착오 끝에 마침내 지역/질감/직사각형을 어떻게 움직일 것인지를 알아 냈습니다. 사람들이 솔루션을 원한다면,

 if ((int)Math.Abs(region.X - camPos.X) > region.Width * 2) 
     { 
      region.X += region.Width * 2; 
     } 

     if (camPos.X < region.X - region.Width) 
     { 
      region.X -= region.Width * 2; 
     } 

     if ((int)Math.Abs(region.Y - camPos.Y) > region.Height * 2) 
     { 
      region.Y += region.Height * 2; 
     } 

     if (camPos.Y < region.Y - region.Height) 
     { 
      region.Y -= region.Height * 2; 
     } 

여기서 camPos는 카메라 위치이고 region은 region/texture/rectangle/whatever입니다.

이 코드는 4 제곱 영역 (2 영역 x 2 영역)에서 작동합니다. 더 많은 지역을 변경하려면 9 스퀘어 지역 및 16 스퀘어 지역에 대해 * 2를 모두 * 3 또는 * 4로 변경하면됩니다.

1

당신은 정말 당신의 지역을 이동하지 않아도, 충분히 그들을 잡아 위치를 결정합니다. N * M 블록 (이 경우 N = M = 2)을 포함하는 지형을 가지고 있다고 가정하고, 각각 A * A 크기입니다 (이 경우 화면 크기가 같은 크기이지만이 것은 중요하지 않습니다). 타일들은 계속해서 서로를 따라 간다.

int LeftColumn = Camera.X/A; // let it round to nearest lower int 
int TopRow = Camera.Y/A; 

LeftColumn = LeftColumn % N; // Calculate the first tile 
TopRow = TopRow % M; 

for (int i = LeftColumn+N; i < LeftColumn+2*N; i++) 
    for (int l = TopRow+M; l < TopRow+2*M; l++) 
    // you may check here if the tile is visible or not based on the screen size 
    { 
    Tile[i % N, l % M].Draw(i*A, l*A); // Or do whatever you like 
    } 

이 내용이 명확합니까?

+0

실제로 나는 네가하는 일을 실제로 모르고있다. Xd 나는 변수가 주어진 다른 위치로 각각 이동하는 것이 오히려 간단해야하지만, 계산할 순서가 확실하지 않다. 그 (것)들 안으로. – kikigreydragon

+0

그리고 나는 나가 당신의 응답을 이해할 수 없었기 때문에 투표하는 방법을 좋아한다. 당신이 내 말에 답장 한 것과는 다릅니다. 감사. – kikigreydragon

+0

나는 아무것도 다운 다운하지 않았습니다. 내 코드는 주위의 다른 공간보다 월드의 주어진 공간에 대한 타일을 계산하는 방법을 사용합니다. 예를 들어, 카메라는 가상의 그리드에서 어딘가에 보이고 이동하려는 경우 "타일"을 계산합니다. 예 : 당신은 3 개의 타일 (0,1,2)을 가지고 있는데, 그것은 8의 상상의 위치에있을 것입니까? (8 mod 3 = 2) 2D에서만 가능합니다. 그게 충분히 명확한가요? – Matzi

관련 문제