がりらぼ

WindowsRuntimeの応援ブログ

MonoGameWindowsRuntimeゲームプログラミング入門vol7:タッチ入力を検知する

タッチ入力

WindowsストアアプリやWindowsPhoneのゲームにおいて、タッチ入力というものはもっとも比重が置かれるべき入力方法です。

シングルタッチだけではなく、マルチタッチにも対応しなければならないので開発者は複数の指のタッチを検知する必要があります。

 

TouchPanel

タッチ入力を検知するためにはTouchPanelクラスのGetStateメソッドを使います。

GetStateメソッドで取得できるTouchCollectionはコレクション型であり、現在タッチしている数だけコレクションに要素が入ります。

 

TouchPanelを使うには以下の名前空間を追加します。

using Microsoft.Xna.Framework.Input.Touch;

 

GetStateメソッドでタッチのコレクションを取得し、foreachで順に調べていきます。

コレクションの要素であるTouchLocationクラスは、Positionプロパティによってタッチ位置を、Stateプロパティによってタッチ状態を取得することができます。

TouchCollection collection = TouchPanel.GetState();
foreach (TouchLocation state in collection)
{
    int id = state.Id;
    float tPosX = state.Position.X;
    float tPosY = state.Position.Y;
    TouchLocationState tLState = state.State;
    if (tLState == TouchLocationState.Pressed)
    {
        //タッチされたときの処理
    }

}

 

サンプル

public class Game1 : Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    SpriteFont font;
    string text;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";

    }


    protected override void Initialize()
    {
        text = "no state";
        base.Initialize();
    }


    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        font = Content.Load<SpriteFont>("TestFont");
  
    }

    protected override void UnloadContent()
    {
        
        
    }


    protected override void Update(GameTime gameTime)
    {
        TouchCollection collection = TouchPanel.GetState();
        foreach (TouchLocation state in collection)
        {
            int id = state.Id;
            float tPosX = state.Position.X;
            float tPosY = state.Position.Y;
            TouchLocationState tLState = state.State;
            if (tLState == TouchLocationState.Pressed)
            {
                //タッチされたときの処理
            }
            text = string.Format("id={0} X={1} Y={2} state={3} touch count={4}",id,tPosX,tPosY,tLState,collection.Count);
            
        }


        base.Update(gameTime);
    }


    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();

        spriteBatch.DrawString(font,text,new Vector2(10,10),Color.White);

        spriteBatch.End();

        base.Draw(gameTime);
    }
}

 

92

シミュレータでのタッチデバッグ方法

シミュレータでは通常ではマウス入力となってしまいます。

右のツールバーから、指マークを選択すると、タッチ入力をシミュレートすることができます。

さらに下のピンチイン、ピンチアウトのマークを選択すると、2本指のタッチ入力をシミュレートすることができます。

91

 

 

サンプルコード

SampleGameMono_5_InputTouch.zip

タッチ入力を検知する | garicchi.com

 

目次