2012-06-12 168 views
-1

如果我有一个文本和图像的网格,如日历视图。如果我想让整个网格躺下45度,并且仍然能够响应手指点击/滚动,该怎么做?非常感谢!如何模拟2D 3D(放下)

回答

2

好的,如果你在XNA中这样做,你会想要使用广告牌。恐怕我还没有广告牌需要,所以我不能给你具体细节,但像往常一样,这是一个Riemers Tutorial。现在,具体而言,您希望拥有带控件的互动广告牌。如果你以前从未有过3D体验,这将会很复杂。这里就是你会想做什么:

  1. 画出你的控制,你通常会用SpriteBatch,但GraphicsDevice的的渲染目标设置到一个新的渲染目标提前,保存所/文本。有关更改rendertarget的文档,请查看here。请记住在绘制控件后将其重新设置。
  2. 现在使用显式转换将RenderTarget转换为Texture2D:Texture2D myTex = (Texture2D)myRenderTarget;
  3. 在广告牌上绘制此纹理。
  4. 现在出现棘手的部分:您需要使用名为“拣选”的技术来确定用户点击了3D空间中的哪个位置。应用程序中心有一些挑选教程,但它们适用于复杂的模型。由于广告牌只使用一个有两个三角形的平面,所以在这种情况下,它们将无法正确工作,这是您需要的。相反,我建议using Viewport.UnProject to pick on the plane

从本质上讲,您将需要一个良好的系统来跟踪3D空间中广告牌上的可点击事件。如果你知道他们(我认为我在微积分III中学到了这些),你可以使用平面方程。如果您只需要基本功能,您可以使用这些方程式仅跟踪按钮的中心,然后执行半径测试以进行点击,但这并不完全准确,除非您的按钮是圆形。

如果您无法判断,当您尝试在3D世界中应用2D概念时,情况变得非常复杂。

4

有一个非常简单的解决方案。 如果使用Expression Blend打开项目,一旦选择了网格,转到属性选项卡,向下缩放到“变换”,应该有一个名为“旋转”的属性,只需更改X:Y:Z:直到网格旋转到您希望的样子。它的行为完全如你所期望的那样。

这里的XAML代码:

<Grid.Projection> 
    <PlaneProjection RotationX="-43"/> 
</Grid.Projection> 
+0

我想我写的“XNA”的主题,但不知何故消失了。我一直在努力使用XNA或silverlight。但我觉得使用XNA更加舒服,因为它非常简单。 Silverlight可以动态地在网格中添加控件吗?在网格控制中绘制文本和图像?轮转能动态变化吗?可以处理网格内新增控件的点击事件?请指教!非常感谢! – thsieh

+0

不确定创建控件,因为我自己没有这样做,但是是绘制文本和图像,是的,以动态更改旋转,不确定是否处理新创建的控件的事件。您是否尝试过关于Silverlight控件的MSDN文章? –