我在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工具,太多的项目,没有足够的时间。 –