2011-11-18 2 views
3

Windows 및 Xbox 용 XNA에서 간단한 2D 게임을 만들었습니다. 저는이 게임을 SpriteBatch, Texture2D 및 기타 게임에서 사용하는 모든 종류의 XNA 제품을 지원하는 Silverlight 5 (이 글을 쓰는 시점에서 아직 RC에서)로 이식하는 중입니다. 내 코드를 Silverlight로 성공적으로 이식했지만 여전히 해상도/크기 조정 문제로 어려움을 겪고 있습니다.Silverlight 응용 프로그램을 너비/높이 50 %로 조정하려면 어떻게해야합니까?

내 원래의 코드와 콘텐츠는 1280 * 720의 해상도로 작동하도록 구성되어있다 - 나는 그것을 그런 식으로 유지하려면 -하지만보다 관리 크기로 웹 페이지에 실버 라이트 게임을 포함 할 : 640x360 (원래 크기의 절반).

그럼 내 질문은 다음과 같습니다. 실버 라이트 앱 전체를 원래 크기의 50 %로 축소하는 방법은 무엇입니까??

저는 제대로 된 것 같지만 제대로 작동시킬 수는 없습니다. 나는 RenderTransformScaleTransform XAML 요소를 발견했으며, 그들은 인 것처럼 보였습니다.은 내가 찾고있는 것을 성취하지만 꽤 아닙니다. 내 XAML은 다음과 같습니다

<!-- Some attributes omitted for brevity --> 
<UserControl x:Class="Silverlight3dApp.MainPage" 
    d:DesignWidth="1280" 
    d:DesignHeight="720"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.RenderTransform> 
     <ScaleTransform x:Name="Scale" ScaleX="0.5" ScaleY="0.5" /> 
    </Grid.RenderTransform> 
    <DrawingSurface x:Name="myDrawingSurface" Draw="myDrawingSurface_Draw" /> 
    </Grid> 
</UserControl> 

그리고 내 HTML 개체는 다음과 같습니다

그래서 포함 된 HTML 개체가 (원하는) 640 × 360으로 설정하고, 실버 라이트 응용 프로그램은 1280 * 720으로 설정되어
<object data="data:application/x-silverlight-2," 
    type="application/x-silverlight-2" 
    width="640" 
    height="360"> 
    <!-- etc. --> 
</object> 

그러나 ScaleX와 ScaleY 모두 0.5로 스케일됩니다. 이 종류의 작품; 앱이 50 % 크기로 축소되지만 그려지는 콘텐츠는 자른입니다. 상단 왼쪽 사분면 만 볼 수 있으므로 320x180 분량의 내용 만 볼 수 있습니다 (원래 크기로 640x360이었을 것입니다).

이 원유 도면에있는 X의 나는 실버 포함 된 개체의 내용을 볼 경우 다른 모든 갑자기 잘려 비어, 대표 :

___________ 
|XXXXX  | 
|XXXXX  | 360px 
|   | 
|___________| 
    640px 

내가 실버 멍청한 놈, 그래서 내가 '느낌이 분명히 뭔가 빠져 있어요. 어떤 아이디어?

답변

1

저는 XNA 통합이 작동하는 방식으로 실제로 50 % 크기로 그릴 필요가 있다고 생각합니다. 당신은 눈 또는 두 개의 캐스트 수, 당신은 정말 게으른 가고 싶은 경우

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, 
    SamplerState.LinearClamp, DepthStencilState.None, 
    RasterizerState.CullCounterClockwise, null, Matrix.CreateScale(.5f)); 
+0

응답 해 주셔서 감사합니다. 내 경우에는 실제로 완벽하게 작동합니다. 완료 및 완료. 고맙습니다! 귀하의 답변을 수락 할 준비가되었습니다. SpriteBatch 이상을 사용하는 다른 사람들에게 효과가있는 "순수 Silverlight"솔루션을 보유하고 있는지 알아보기 위해 조금만 보류하겠습니다. 관계없이 Upvoted, 좋은 대답, 감사합니다. 추신 SilverSprite 작성자입니까? 그렇다면 멋진 작품! 어제 그걸 가지고 놀고 있었어. – Michael

+0

캔버스에서 DrawingSurface를 래핑 해 볼 수 있습니다. 그리드가하는 클립핑을 때때로 방지 할 수 있습니다. 예, 저는 SilverSprite를 썼습니다. 현재 Silverlight 5의 새로운 기능, 너무 많은 프로젝트, 충분한 시간이 필요하지 않습니다. –

0

: 이것은 당신이 단지 당신이 매트릭스를 지정할 수 있습니다 시작의 오버로드를 사용하여,의 SpriteBatch를 사용하는 경우 수행 할 매우 간단합니다 ViewBox 컨트롤이 작동하는 방식. 그것이 스케일링에 관해서 100 % 신뢰성이 있는지는 기억이 나지 않습니다.하지만 제가 생각하기에 처음에는 괜찮을 것입니다. 프로덕션 환경의 일부 대체 시나리오에 사용했습니다.

관련 문제