2011-11-18 41 views
3

我在XNA中爲Windows和Xbox創建了一個簡單的2D遊戲。我正在將此遊戲移植到Silverlight 5中(在編寫本文時,仍在RC中),它支持SpriteBatch,Texture2D以及我在遊戲中使用的各種其他XNA好吃的東西。我成功地將大部分代碼移植到了Silverlight,但我仍然在解決/調整大小問題。如何將Silverlight應用程序縮放到50%寬度/高度?

我的原代碼和內容被配置在1280×720決議的工作 - 我想繼續保持這種方式 - 但我想嵌入網頁上的Silverlight的遊戲,在一個更易於管理的大小:640x360(原始尺寸的一半)。

所以我的問題是這樣的:如何將整個Silverlight應用程序縮小到原始大小的一半

我想我走在正確的軌道上,但我無法完全理解它的工作原理。我發現了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對象看起來是這樣的:

<object data="data:application/x-silverlight-2," 
    type="application/x-silverlight-2" 
    width="640" 
    height="360"> 
    <!-- etc. --> 
</object> 

所以嵌入式HTML對象被設置爲640×360(如需要),以及Silverlight應用程序設置爲1280×720但是ScaleX和ScaleY的縮放比例均爲0.5。這作品;該應用程序正在縮小到50%的大小,但繪製的內容是裁剪。我只能看到左上象限,所以我只能看到320x180的內容(原始尺寸爲640x360)。

的X的這種原油圖中表示,我看到在Silverlight中嵌入對象的內容,其他一切都突然冒出空:

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

我是一個Silverlight小白,讓我有一種感覺,我」我錯過了很明顯的事有任何想法嗎?

回答

1

我認爲隨着XNA集成的工作方式,您需要以50%的尺寸實際繪製。這是很容易的,如果你正在使用SpriteBatch,只使用過載開始,讓你指定一個矩陣做:如果你想要去的一個非常懶惰

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

感謝您的迴應!在我的情況下,這實際上工作*完美*。完成並完成。謝謝!我已經準備好接受你的答案 - 我只是稍稍停留一下,看看是否有人有一個「純Silverlight」解決方案,這個解決方案適用於那些使用的不僅僅是SpriteBatch的人。無論如何,偉大的回答,謝謝。附:你是SilverSprite的作者嗎?如果是這樣,不錯的工作!我昨天只是在玩。 – Michael

+0

您可能想嘗試在Canvas中包裝DrawingSurface,這有時可以防止Grid執行的裁剪。是的,我寫了SilverSprite,目前我正在努力讓它與新的Silverlight 5工具,太多的項目,沒有足夠的時間。 –

0

,你可以投的眼睛或兩個如何控制ViewBox。我記不起它是否具有100%的可靠性,但我認爲對於初學者來說應該沒問題。我已經將它用於生產中的一些後備場景。

相關問題