2012-02-01 4 views
1

Windows Phone 7 용 XNA로 게임을하기로 결심했으며, 첫 번째 게임에서는 이미지를 찍어 사각형 스프라이트로 분할해야하므로 이미지는 기본적으로 스프라이트 시트가됩니다. 원본 이미지는 화면 크기가 너무 크거나 작을 수 있으므로 화면에 맞도록 간격을 적용하는 방법을 알아 보려면 다음을 수행했지만 간격이 표시되지 않도록해야합니다 (한 차원이 화면).XNA에서 스프라이트 시트를 어떻게 스케일합니까?

Texture = content.Load<Texture2D>(assetName); 

var width = Texture.Bounds.Width; 
var height = Texture.Bounds.Height; 

var widthDifference = width - screenWidth; 
var heightDifference = height - screenHeight; 

if (widthDifference < 0 || heightDifference < 0) 
{ 
    if (widthDifference < heightDifference) 
     Scale = (float) screenWidth/width; 
    else 
     Scale = (float) screenHeight/height; 
} 
else 
{ 
    if (widthDifference > heightDifference) 
     Scale = (float) screenWidth/width; 
    else 
     Scale = (float) screenHeight/height; 
} 

if (Scale < 0) 
    Scale = Scale*-1; 

그러나 다음으로 그리드에서 화면을 깔끔하게 채울이 이미지에서 스프라이트를 생성해야합니다. 내 주요 질문은 각 스프라이트에서 내 draw 메소드를 호출 할 때 원래 스프라이트 시트에 스케일링이 적용되는지 아니면 스프라이트 시트에서 텍스처를 가져온 후에 스프라이트 자체에만 적용되는지 여부입니다.

후자 인 경우 개별 스프라이트를 만들기 전에 스프라이트 시트의 크기를 가장 잘 조절하는 방법에 대해 약간 혼란 스럽습니다. 실제로 이미지를 크기를 정확하게 조정하여 화면 크기와 정확하게 일치하도록 만들면 삶이 편해지지만 약간은 무거워 보입니다.

모든 의견을 환영합니다.

답변

1

spritesheet 이미지가 화면보다 크거나 그 안의 개별 스프라이트가 있다고 하시겠습니까?

이전 버전 인 경우 시트의 일부 (예 : 스프라이트) 만 그리면 중요하지 않다고 생각합니다.

후자의 경우 이미지 편집기를 사용하여 스프라이트 시트의 크기를 조정하면됩니다.

SpriteBatch을 사용하는 경우 소스 사각형 (텍스처 좌표)과 대상 사각형 (화면 좌표)을 지정할 수 있으므로 크기 조정을 할 수 있습니다.

+0

스프라이트 시트는 사진이며 화면보다 작을 수 있습니다.이 경우 화면 비율을 유지하면서 화면 비율을 유지하거나 화면을 채울 때 크기가 커지거나 커질 수 있습니다. 하위. 어떤 방법 으로든 이미지가 화면을 채 웁니다 (한 치수가 화면 너비 또는 높이보다 큰지 여부는 중요하지 않음). 스프라이트 자체는 화면 치수를 (스프라이트 시트가 아닌) 분할하는 것으로 받아쓰기가 필요합니다.하지만 제안이나 소스 및 대상 사각형이 마음에 들었습니다. 나는 그걸 가지고 놀 수 있습니다. –

+1

크기가 조정 된 스프라이트 시트 이미지로 새로운 텍스처를 만들 것을 제안합니다. WP7이 다른 렌더 타겟에 렌더링 할 수 있다고 가정합니다. 그런 다음, 직사각형에 스케일을 적용 할 필요가 없습니다 (위치에 대해 걱정할 필요가 있습니다). –

+0

원본 이미지를 가져 와서 자르고 자르면 메모리에 저장되어 실제로 저장되지 않은 텍스처로 복사 할 수 있습니까? 나는 그것이 실제로 달성하려고 노력하는 것보다 실제로 훨씬 쉬울 것이라고 생각합니다! –

관련 문제