在 Windows Phone 7 游戏开发中,触摸交互是 1 触摸操作的基础知识
开始开发视窗电话 7
视窗电话 7 应用程序平台
Windows Phone 7 的开发环境于 2010 年 9 月正式发布,而实际运行 Windows Phone 7 的智能手机也开始投放市场。
图 1:HTC 7 特洛菲,配备 Windows 电话 7,由 HTC 销售
如果要创建在 Windows Phone 7 上运行的应用程序,请选择“银色”或“XNA 框架”作为要使用的程序的框架。 通常,您将使用 XNA 框架来开发游戏,而其他应用程序(如工具)将使用“银光”。
在这里,我们将使用 XNA 框架作为游戏开发,并讨论如何使用“触摸屏”,这是 Windows Phone 7 用户界面最常用的用户界面。 XNA 游戏工作室的帮助中提供了一些简单的用法,因此我想在这里稍微深入一点。
创造良好的开发环境
我们将从您已经接触过 XNA 游戏工作室的角度来讨论它,因此我将不讨论安装和设置等细节。 XNA 游戏工作室附带的帮助和 Web 也包含大量信息,因此请查看它们。 在我的网站上(http://sorceryforce.com/xna/)也介绍了一些。
- Windows Phone Developer Tools
- Zune Software
- 运行 Windows 电话 7 的实际设备或 Windows 7 多点触控环境
- 申请 Windows 电话开发人员注册
图 2 :Microsoft Visual Studio 2010 Express for Windows Phone(包含在 Windows Phone Developer 工具中)
图 3:视窗电话模拟器
编程! - 1. 获取触摸信息
关于此示例
Windows Phone 7 使用的 XNA 框架版本为 4.0,但在此之前,没有触摸屏类,主要是键盘、鼠标和游戏板。 自 4.0 以来,Windows Phone 7 得到了支持,因此添加了新的触摸屏类。
在本文中,我们将主要讨论该类,但如果要获取有关简单触摸位置的信息,则可以将其替换为其他类,而无需使用触摸屏类。 这是一个“缪斯”类。 在此示例中,我想使用 Mouse 类来获取触摸信息。
此示例程序的目标
触摸屏幕时,图像(子画面)将与触摸位置对齐。
图 3,4:子画面显示在触摸的位置
程序 - 声明字段
现在,我想与示例程序一起解释它。 由于我们不讨论与触摸交互没有直接关系或从头开始编写的程序,因此请参阅单独分发的源代码。
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
<summary>
テクスチャー
</summary>
Texture2D texture;
<summary>
タッチしている位置
</summary>
Vector2 touchPosition;
public Game1()
{
字段声明 Vector2 结构的变量,用于保存纹理和触摸位置,以便在触摸位置绘制。
程序 - 加载纹理
将纹理添加到内容项目,然后使用 LoadContent 方法加载它。 因为它与触摸屏相关没有直接关系,因此没有详细说明。
图 6:将文本.png添加到内容项目
图 7:示例中使用的图像
protected override void LoadContent()
{
// 新規の SpriteBatch を作成します。これはテクスチャーの描画に使用できます。
spriteBatch = new SpriteBatch(GraphicsDevice);
// テクスチャーをコンテンツパイプラインから読み込む
texture = Content.Load<Texture2D>("Texture");
}
程序 - 获取触摸信息
触摸信息在游戏.更新方法中获取。
使用“鼠标”类而不是专用类获取触摸信息。 使用 Mouse.GetState 方法,在“鼠标状态”结构中返回当前鼠标状态,因此您可以从“鼠标状态.X”和“鼠标状态.Y”属性中获取触摸的位置。
protected override void Update(GameTime gameTime)
{
// ゲームの終了条件をチェックします。
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// マウスの状態を取得(ここではタッチパネルの簡易的な情報)
MouseState mouseState = Mouse.GetState();
// タッチしている位置を設定
touchPosition = new Vector2(mouseState.X, mouseState.Y);
base.Update(gameTime);
}
使用 Mouse 类获取触摸信息的一个注意事项是,它仅返回简单的信息。 使用 Mouse 类时,只能获取“仅一次触摸”、“触摸位置(鼠标状态.X、鼠标状态.Y 属性)”和“是否触摸(鼠标状态.左按钮)”。 不支持多点触控或手势。 此外,如果未触摸,则返回位置(如果已获取),则继续返回上一个触摸位置。 如果不触摸,您将无法接收输入信息,因此无法获取鼠标悬停等位置信息。
程序 - 绘制纹理
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// スプライトの描画準備
spriteBatch.Begin();
// タッチしている位置にテクスチャーを描画
spriteBatch.Draw(texture, touchPosition, Color.White);
// スプライトの一括描画
spriteBatch.End();
base.Draw(gameTime);
}
此示例摘要
由于 Mouse 类替换了触摸信息的获取,因此只能像获取示例一样获取触摸位置。 相反,如果您使用仅触摸类,则可以获取更多信息。
因此,使用 Mouse 类获取触摸信息没有好处。 使用 Mouse 类的好处包括:
- 与在 Windows 上运行的鼠标感知游戏共享代码
- 以最少代码编写触摸位置信息
- 可以省去不必要的处理
如果您只使用触摸位置信息,则使用 Mouse 类可以更好地利用上述优势。