2011-11-13 3 views
3

지금은 MonoGame samples의 예제와 비슷한 2 개의 for 루프를 사용하여 Texture2D를 타일링하고 있습니다.MonoGame - iOS에서 SpriteBatch가있는 Texture2D 타일링

필자는 약간의 독서를하고 있었고 두 개의 텍스처 (폭이 & 인 2, 4, 8, 16, 32 등)를 하나의 SpriteBatch.Draw 호출로 바둑판 식으로 사용할 수 있다는 것을 알았습니다.

iOS의 MonoGame에서 지원됩니까?

나는 여러 번 시도해 보았고, 이미지를 바둑판 식으로 배열하는 대신 이미지를 단순히 뻗어서 만들었다.

내 SpriteBatch.Begin()에 SamplerState.LinearWrap을 사용하고 2048x128 png를 사용하여 512x32에서 1/4 크기로 시도했지만 운이 없었습니다. (큰 사이즈를 사용하면 b/c 우리 게임은 2400x에서 실행됩니다. 축소 된 것, b/c로 카메라를 2.5 배로 확대 할 수 있습니다)

+1

그리기 방법에 제공 한 소스 사각형은 무엇입니까? 이미지가 뻗어 있다고 말하면 ... 전체 이미지가 포함 된 rect를 공급하는 것처럼 들립니다. – dowhilefor

+0

나는 이것을 여기서 곧 시험해 보겠다. 한 가지 문제는 타일링 된 이미지 스트립을 사용한다는 것입니다 (비 효과). 이것은 아마 협력하지 않을 것입니다, 그렇죠? X/Y 방향으로 바둑판 식으로 배열해야하며 이미지 스트립을 가로 질러 소스 직사각형을 움직여서 비가 내리는 것을 시뮬레이트하는 4 개의 프레임이 있습니다. 우리는 각 프레임마다 다른 Texture2D를 사용해야한다고 생각합니다. 맞습니까? (원본 크기 조정 가정 날 위해 일하는 가정) – jonathanpeppers

+0

내 문제는 여기에 XNA 샘플 것 : http://msdn.microsoft.com/en-us/library/bb975153(v=xnagamestudio.30).aspx 않았다 원본 사각형을 아주 잘 설명해주세요. @dowhilefor, 답을 게시하면 받아 들일 수 있습니다. (같은 시간에 이미지 스트립을 사용하여 타일링하고 애니메이션을 적용하는 방법에 대해 자세히 설명 할 수도 있음) – jonathanpeppers

답변

2

draw method에서 SourceRectangle 매개 변수를 사용할 수 있습니다. 표시 할 텍스처 부분을 정의합니다. 128x128 텍스처가 있다고 가정 해 보겠습니다. Rect(0, 0, 128, 128)을 제공하면 draw 메소드에 전체 텍스처를 사용하도록 지시합니다. null을 draw 메소드에 전달하는 경우에도 마찬가지입니다. Rect(0, 0, 64, 64)을 입력하면 텍스처의 왼쪽 상단 부분을 사용하게됩니다. 스프라이트 자체가 얼마나 큰지 상관없이 스프라이트는이 부분을 표시합니다. 따라서 스프라이트가 128x128 크기로 그려지면 64x64 텍스처 부분의 크기가 조정됩니다.

이제 애니메이션에 사용할 수 있습니다. 텍스처에 this과 같은 애니메이션 시퀀스를 저장하는 경우 시퀀스의 다음 이미지를 표시 할 때마다 원본 사각형을 다시 계산하면됩니다.

그 외에도 소스 텍스처보다 큰 값을 전달할 수 있습니다. 이제 XNA가 텍스처를 래핑하거나 클램프해야합니다. 그렇게하면 간단한 타일링을 얻을 수 있습니다. 그것보다 더 많은 것이 필요하다면 foreach 루프와 같은 수동 접근 방식을 사용해야 할 것입니다. 감싸기는 텍스처가 두 개인 경우에만 지원됩니다.