Dotyková interakce při vývoji her pro Windows Phone 7 Část 1: Základy dotykové interakce
Začínáme s Windows Phone 7
Aplikační platforma Windows Phone 7
Vývojové prostředí Windows Phone 7 bylo oficiálně vydáno v září 2010 a smartphony, které skutečně běží Windows Phone 7, se začaly dostávat na trh.
Obrázek 1: HTC 7 Trophy s Windows Phone 7 prodávaný společností HTC
Při vytváření aplikace, která běží na Windows Phone 7, můžete si vybrat mezi "Silverlight" a "XNA Framework" jako programový rámec. Obecně budete používat "XNA Framework" pro vývoj her a "Silverlight" pro jiné aplikace, jako jsou nástroje.
Tato část používá XNA Framework pro vývoj her a vysvětluje, jak používat dotykový panel, který bude nejpoužívanějším uživatelským rozhraním pro Windows Phone 7. Jednoduché použití je popsáno v nápovědě XNA Game Studio, takže bych to zde rád vysvětlil trochu podrobněji.
Příprava vývojového prostředí
Tato sekce je z pohledu někoho, kdo se alespoň trochu dotkl XNA Game Studio, takže vynechám podrobné pokyny jako je instalace a nastavení. V nápovědě, která přichází s XNA Game Studio a na webu, je mnoho informací, takže se na to prosím podívejte sami. Mám také nějaké na svých stránkách (http://sorceryforce.com/xna/).
- Nástroje pro vývojáře pro Windows Phone
- Zune Software
- Skutečné zařízení se systémem Windows Phone 7 nebo vícedotykovým prostředím Windows 7
- Aplikace pro registraci vývojáře pro Windows Phone
Obrázek 2: Microsoft Visual Studio 2010 Express pro Windows Phone (součást nástrojů pro vývojáře pro Windows Phone)
Obrázek 3: Emulátor Windows Phone
Programování! - 1. Získání informací o dotyku
O této ukázce
Verze XNA Framework používaná ve Windows Phone 7 je "4.0", ale do té doby neexistovaly žádné třídy pro dotykové panely a klávesnice, myši a gamepady byly hlavním proudem. Od verze 4.0 je podporován Windows Phone 7 a byla přidána nová třída věnovaná dotykovým panelům.
V tomto článku vysvětlíme hlavně tuto třídu, ale ve skutečnosti, pokud chcete získat jednoduché informace o dotykové poloze, můžete nahradit jinou třídu bez použití třídy pro dotykové panely. Je to třída "Mouse". V této ukázce použijeme třídu Mouse k získání informací o dotyku.
Cíle tohoto ukázkového programu
Když se dotknete obrazovky, obraz (pohyblivý symbol) se umístí podle polohy dotyku.
Obrázek 3,4: Sprites se objevují na dotykových místech
Program - deklarování polí
Rád bych to hned vysvětlil spolu s ukázkovým programem. Vysvětlení částí, které přímo nesouvisejí s dotykovým ovládáním a programy vytvořenými od začátku, jsou vynechány, proto se prosím podívejte na zdrojový kód distribuovaný samostatně.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
<summary>
テクスチャー
</summary>
Texture2D texture;
<summary>
タッチしている位置
</summary>
Vector2 touchPosition;
public Game1()
{
Pole deklaruje texturu pro kreslení v místě dotyku a proměnnou struktury Vector2 pro uložení polohy dotyku.
Program - Načítání textur
Textury jsou již přidány do projektu obsahu a načteny pomocí metody LoadContent. Vzhledem k tomu, že obsah přímo nesouvisí s dotykovými panely, jsou vynechána podrobná vysvětlení.
Obrázek 6: Přidání textury.png do projektu obsahu
Obrázek 7: Obrázek použitý v této ukázce
protected override void LoadContent()
{
// 新規の SpriteBatch を作成します。これはテクスチャーの描画に使用できます。
spriteBatch = new SpriteBatch(GraphicsDevice);
// テクスチャーをコンテンツパイプラインから読み込む
texture = Content.Load<Texture2D>("Texture");
}
Program - Dotykové získávání informací
Informace o dotyku se načítají v metodě Game.Update.
Informace o dotyku získávám pomocí třídy "Myš" místo z vyhrazené třídy. Při použití metody "Mouse.GetState" je aktuální stav myši vrácen ve struktuře "MouseState", takže můžete získat dotykovou pozici z vlastností "MouseState.X" a "MouseState.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);
}
Jedna věc, kterou je třeba poznamenat o použití třídy Mouse k získání dotykových informací, je, že vrací pouze jednoduché informace. Jediná omezení informací, které lze získat při použití třídy Mouse, jsou "pouze jedním dotykem", "pozice dotyku (vlastnost MouseState.X, MouseState.Y)" a "zda se chcete dotknout (MouseState.LeftButton)". Nepodporuje vícedotykové ovládání ani gesta. Pokud získáte pozici, když jste se jí nedotkli, bude pokračovat v návratu předchozí dotykové pozice. Vzhledem k tomu, že vstupní informace nelze přijmout, pokud se jich nedotknete, nelze získat informace o poloze, například najetí myší.
Program - Kreslení textur
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// スプライトの描画準備
spriteBatch.Begin();
// タッチしている位置にテクスチャーを描画
spriteBatch.Draw(texture, touchPosition, Color.White);
// スプライトの一括描画
spriteBatch.End();
base.Draw(gameTime);
}
Shrnutí této ukázky
Vzhledem k tomu, že třída Mouse nahrazuje získávání dotykových informací, informace lze získat pouze získáním dotykové pozice jako v tomto vzorku. Naopak, pokud používáte pouze dotykovou třídu, můžete získat více informací.
Proto není bez zásluh získat dotykové informace pomocí třídy Mouse. Použití třídy Mouse poskytuje následující výhody:
- Může sdílet kód s hrami s podporou myši spuštěnými v systému Windows
- Informace o poloze dotyku lze zapsat s nejmenším množstvím kódu
- Zbytečné zpracování lze vynechat
Pokud používáte pouze jeden dotyk a pouze dotykové polohování, můžete využít výše uvedených výhod pomocí třídy Mouse.