Touchinteraktion i spelutveckling för Windows Phone 7 Del 1 Grunderna i touchinteraktion
Komma igång med Windows Phone 7
Windows Phone 7-programplattform
Windows Phone 7-utvecklingsmiljön släpptes officiellt i september 2010, och smartphones som faktiskt kör Windows Phone 7 har börjat komma ut på marknaden.
Bild 1: HTC 7 Trophy med Windows Phone 7 säljs av HTC
När du skapar ett program som körs på Windows Phone 7 kan du välja mellan "Silverlight" och "XNA Framework" som programramverk. I allmänhet kommer du att använda "XNA Framework" för spelutveckling och "Silverlight" för andra applikationer som verktyg.
I det här avsnittet används XNA Framework för spelutveckling och hur du använder pekskärmen, som är det mest använda användargränssnittet för Windows Phone 7. Den enkla användningen beskrivs i XNA Game Studio-hjälpen, så jag skulle vilja förklara det på ett lite mer djupgående sätt här.
Förbered utvecklingsmiljön
Det här avsnittet är ur perspektivet av någon som till och med har berört XNA Game Studio något, så jag kommer att utelämna detaljerade instruktioner som installation och installation. Det finns mycket information i hjälpen som följer med XNA Game Studio och på webben, så kolla in det själv. Jag har också några på min webbplats (http://sorceryforce.com/xna/).
- Utvecklarverktyg för Windows Phone
- Zune-programvara
- En riktig enhet som kör Windows Phone 7 eller en Windows 7 multi-touch-miljö
- Registreringsprogram för Windows Phone-utvecklare
Bild 2: Microsoft Visual Studio 2010 Express för Windows Phone (ingår i Windows Phone Developer Tools)
Bild 3: Windows Phone-emulator
Programmering! - 1. Få information om beröring
Om det här exemplet
Den version av XNA Framework som används i Windows Phone 7 är "4.0", men fram till dess fanns det inga klasser för pekskärmar, och tangentbord, möss och gamepads var mainstream. Sedan 4.0 har Windows Phone 7 stödts, och en ny klass dedikerad till pekskärmar har lagts till.
I den här artikeln kommer vi främst att förklara den klassen, men i själva verket, om du vill få enkel beröringspositionsinformation, kan du ersätta en annan klass utan att använda en klass för pekskärmar. Det är klassen "Mus". I det här exemplet använder vi klassen Mus för att få pekinformation.
Mål för detta exempelprogram
När du trycker på skärmen placeras bilden (sprite) enligt pekpositionen.
Bild 3,4: Sprites visas vid vidrörda positioner
Program - Deklarera fält
Jag skulle vilja förklara det tillsammans med provprogrammet direkt. Förklaringar av delar som inte är direkt relaterade till beröringsoperation och program som skapats från början utelämnas, så se källkoden som distribueras separat.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
<summary>
テクスチャー
</summary>
Texture2D texture;
<summary>
タッチしている位置
</summary>
Vector2 touchPosition;
public Game1()
{
Fältet deklarerar en struktur som ska ritas vid pekpositionen och en Vector2-strukturvariabel för att lagra pekpositionen.
Program - Läsa in texturer
Texturer har redan lagts till i innehållsprojektet och lästs in med metoden LoadContent. Eftersom innehållet inte är direkt relaterat till pekskärmar utelämnas detaljerade förklaringar.
Bild 6: Lägga till en textur.png i innehållsprojektet
Bild 7: Bild som används i det här exemplet
protected override void LoadContent()
{
// 新規の SpriteBatch を作成します。これはテクスチャーの描画に使用できます。
spriteBatch = new SpriteBatch(GraphicsDevice);
// テクスチャーをコンテンツパイプラインから読み込む
texture = Content.Load<Texture2D>("Texture");
}
Program - Touch Information Acquisition
Pekinformationen hämtas i metoden Game.Update.
Jag får beröringsinformationen med klassen "Mus" istället för från en dedikerad klass. När du använder metoden "Mouse.GetState" returneras det aktuella mustillståndet i strukturen "MouseState", så att du kan få pekpositionen från egenskaperna "MouseState.X" och "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);
}
En sak att notera om att använda musklassen för att få pekinformation är att den bara returnerar enkel information. De enda begränsningarna för information som kan erhållas när du använder klassen Mouse är "endast enkel beröring", "pekposition (MouseState.X, MouseState.Y-egenskap)" och "om du vill röra eller inte (MouseState.LeftButton)". Det stöder inte multi-touch eller gester. Om du får en position när du inte har rört den fortsätter den att återställa den tidigare beröringspositionen. Eftersom inmatningsinformation inte kan tas emot om den inte berörs, kan platsinformation inte förvärvas, till exempel mouseover med musen.
Program - Rita texturer
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// スプライトの描画準備
spriteBatch.Begin();
// タッチしている位置にテクスチャーを描画
spriteBatch.Draw(texture, touchPosition, Color.White);
// スプライトの一括描画
spriteBatch.End();
base.Draw(gameTime);
}
Sammanfattning av detta exempel
Eftersom klassen Mouse ersätter förvärvet av beröringsinformation kan information endast erhållas genom att erhålla beröringspositionen som i detta prov. Omvänt, om du använder en touch-only-klass, kan du få mer information.
Därför är det inte utan meriter att få beröringsinformation med hjälp av Mus-klassen. Att använda klassen Mouse ger följande fördelar:
- Kan dela kod med musaktiverade spel som körs på Windows
- Pekplatsinformation kan skrivas med minsta möjliga mängd kod
- Onödig behandling kan utelämnas
Om du bara använder single touch och only touch positioning kan du dra nytta av ovanstående fördelar genom att använda klassen Mus.