4

Windows Phone 有一个很好的按钮倾斜效果,如下图所示:

地铁倾斜效果

是否可以使用在 XNA 中重新实现此行为SpriteBatch?我可以检测到触摸位置并计算矩形角应该在的点,但我不知道如何使用这种失真来渲染图像。

4

2 回答 2

3
Matrix projection = Matrix.CreateOrthographicOffCenter(0, viewport.Width, viewport.Height, 0, 0, 1);
Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);

basicEffect.World = Matrix.Identity;
basicEffect.View = Matrix.Identity;
basicEffect.Projection = halfPixelOffset * projection;

basicEffect.TextureEnabled = true;
basicEffect.VertexColorEnabled = true;

spriteBatch.Begin(0, null, null, null, null, basicEffect);

您可以将 BasicEffect 传递给 SpriteBatch.Begin 方法。这允许您将自定义着色器与 spritebatch 一起使用,更有趣的是,您可以控制相机并转换支持 SpriteBatch 的四边形。以上是默认设置,应该像标准 SpriteBatch 那样运行,您不能专门更改点,但旋转应该可以达到您想要的效果。

要更改四边形的 3D 位置,只需更改 basicEffect.World 矩阵。

例子:

basicEffect.View = Matrix.Identity * Matrix.CreateRotationY(.002);
于 2013-07-16T14:22:44.283 回答
2

嗯,这当然是可能的,但涉及到相当多的数学。

TouchPanel.GetState() 方法将以与在 Silverlight 中使用 TouchLocations 几乎相同的方式返回所有屏幕触摸及其状态。主要不同之处在于您已经在像素级别工作,因此无需浏览 XAML 树。

基本上它会是这样的: * 使用 GetState() 获取当前的触摸面板触摸集合 * 遍历 UI 元素的更新并测试与触摸点的碰撞。* 计算你的 UI 元素的哪一部分被触摸(取决于你想要的精确度,在 4 个角或更精确)或跟踪动画 * 当触摸丢失时,确保 UI 元素识别到这一点并返回动画(或者如果触摸已移动,则在另一个方向动画。

对于您可以使用的一些很酷的动画和过渡,Reach 演示(用于手机)展示了一些很棒的效果以及如何实现它们。它们中的大多数是整页效果,但您应该能够分解必要的部分以获得您正在寻找的那种平铺动画效果:http: //xbox.create.msdn.com/en-US/education/catalog /sample/reach_graphics_demo

让我知道这是否有帮助

于 2013-07-08T12:48:15.743 回答