我在Windows和Xbox上使用XNA创建了一个简单的2D游戏。我正在将这个游戏移植到Silverlight 5中(在撰写本文时仍处于RC阶段),该平台支持SpriteBatch,Texture2D和我在游戏中使用的各种其他XNA好用功能。我已成功将大部分代码移植到Silverlight中,但仍在努力解决分辨率/尺寸问题。
我的原始代码和内容配置为在分辨率为1280x720的情况下运行 - 我想保持这种方式 - 但我想将Silverlight游戏嵌入网页中以获得更可管理的尺寸:640x360(其原始大小的一半)。
因此,我的问题是:如何将整个Silverlight应用程序缩小到其原始大小的50%?
我认为我正在正确的轨道上,但我还不能完全让它工作。我发现了RenderTransform和ScaleTransform XAML元素,它们似乎几乎可以实现我所需求的目标,但并不完全。我的XAML如下:
因此,嵌入的HTML对象设置为640x360(如所需),Silverlight应用程序设置为1280x720,然后缩放为ScaleX和ScaleY的0.5。这种方法有点可行;应用程序被缩小到50%的大小,但绘制的内容被裁剪了。我只能看到左上象限,因此只能看到320x180个像素的内容(在原始尺寸下本应为640x360)。
在这个简陋的图中,“X”代表我在Silverlight嵌入对象中看到的内容,其他部分都被突然裁剪为空:
我的原始代码和内容配置为在分辨率为1280x720的情况下运行 - 我想保持这种方式 - 但我想将Silverlight游戏嵌入网页中以获得更可管理的尺寸:640x360(其原始大小的一半)。
因此,我的问题是:如何将整个Silverlight应用程序缩小到其原始大小的50%?
我认为我正在正确的轨道上,但我还不能完全让它工作。我发现了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对象设置为640x360(如所需),Silverlight应用程序设置为1280x720,然后缩放为ScaleX和ScaleY的0.5。这种方法有点可行;应用程序被缩小到50%的大小,但绘制的内容被裁剪了。我只能看到左上象限,因此只能看到320x180个像素的内容(在原始尺寸下本应为640x360)。
在这个简陋的图中,“X”代表我在Silverlight嵌入对象中看到的内容,其他部分都被突然裁剪为空:
___________
|XXXXX |
|XXXXX | 360px
| |
|___________|
640px
我是一个 Silverlight 新手,所以我有一种感觉我错过了一些显而易见的东西。有什么想法吗?