我在XNA中爲Windows和Xbox創建了一個簡單的2D遊戲。我正在將此遊戲移植到Silverlight 5中(在編寫本文時,仍在RC中),它支持SpriteBatch,Texture2D以及我在遊戲中使用的各種其他XNA好吃的東西。我成功地將大部分代碼移植到了Silverlight,但我仍然在解決/調整大小問題。如何將Silverlight應用程序縮放到50%寬度/高度?
我的原代碼和內容被配置在1280×720決議的工作 - 我想繼續保持這種方式 - 但我想嵌入網頁上的Silverlight的遊戲,在一個更易於管理的大小:640x360(原始尺寸的一半)。
所以我的問題是這樣的:如何將整個Silverlight應用程序縮小到原始大小的一半?
我想我走在正確的軌道上,但我無法完全理解它的工作原理。我發現了RenderTransform
和ScaleTransform
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小白,讓我有一種感覺,我」我錯過了很明顯的事有任何想法嗎?
感謝您的迴應!在我的情況下,這實際上工作*完美*。完成並完成。謝謝!我已經準備好接受你的答案 - 我只是稍稍停留一下,看看是否有人有一個「純Silverlight」解決方案,這個解決方案適用於那些使用的不僅僅是SpriteBatch的人。無論如何,偉大的回答,謝謝。附:你是SilverSprite的作者嗎?如果是這樣,不錯的工作!我昨天只是在玩。 – Michael
您可能想嘗試在Canvas中包裝DrawingSurface,這有時可以防止Grid執行的裁剪。是的,我寫了SilverSprite,目前我正在努力讓它與新的Silverlight 5工具,太多的項目,沒有足夠的時間。 –