Blog


連絡先を検索、取得する(WindowsPhone)

ContactManager

WindowsPhoneのみ、ContactManagerAPIで連絡先の検索、取得を行うことができます。

 

検索

取得

 




連絡先を選択するには

ContactPicker

WindowsRuntimeでは連絡先ピッカーが管理する連絡先を自由に選択することができます。

連絡先ピッカーとは、マニフェストファイルで宣言タブの「連絡先ピッカー」が宣言されているアプリが、ほかのアプリから呼ばれ、自身の所有する連絡先をアプリに代わって選択するピッカーのことです。

 

Windows8.1で代表的な連絡先ピッカーアプリはPeopleです。

Peopleアプリを連絡先ピッカーとしてContactPickerを起動すると連絡先情報を取得することができます。

 

ContactPickerの名前空間である以下を追加します。

 

まずContactPickerのインスタンスを生成します。

CommitButtonTextとは、連絡先ピッカーで連絡先を選択したときに決定ボタンに表示される文字です。

 

連絡先のどの要素を取得するかは、DesiredFiledsWithContactFieldTypeによって決定します。

 

最後にPickContactAsyncメソッドで連絡先ピッカーへと処理を渡します。

連絡先ピッカーが連絡先を選択すると、Contact型の値を返します。

 

複数の連絡先を取得する場合はPickContactsAsyncメソッドを呼びます。

 




セーブデータを保存する

ゲームのセーブデータ

ゲームにおいて獲得したスコアや最高記録などはセーブデータとしてストレージに保存します。

そして次回以降の起動でセーブデータを復元します。

 

WindowsRuntimeにおけるデータ保存方法

WindowsRuntimeでは設定データとファイルデータの2つのデータ保存方法があります。

単純な設定データなどは設定データとして~Settingに保存します。 大きいデータやファイル単位で保存したいデータは~Folder内にファイルを作って保存します。

設定データは、ApplicationDataContainerクラスで作られていて、キーそれに対応する値のセットでつくられます。

ファイルデータは、StorageFolderクラスとして保存するフォルダーを取得することができるのでそこにファイルとして書き込みます。

具体的には、ApplicationDataクラスの中に、

設定データ(ApplicationDataContainer型)

  • LocalSetting – ローカルの設定データ
  • RoamingSetting – ローミング設定データ

ファイルデータを入れるフォルダー(StorageFolder型)

  • LocalFolder – ローカルファイルフォルダー
  • RoamingFolder – ローミングファイルフォルダー
  • TemporaryFolder – 一時的なデータを保存するファイルフォルダー
  • LocalCacheFolder – 一時データ?

の6つのプロパティがあり、そこにデータを入れることになります。

20140714130709

 

ローカルデータとローミングデータ

さらに、WindowsRuntimeでは複数のデバイス間でデータを同期できるようにデータローミングという概念を採用しています。 Roamingがつく設定やフォルダーにデータを入れると、データはOneDriveで同期され、別のデバイスでも同じデータを扱うことができます。 ユニバーサルアプリの場合、「アプリをストアに関連付ける」をした後、WindowsアプリとWindowsPhoneアプリ間でデータがローミングされます。

 

別のデバイスでゲームをプレイしても、自分のスコアを引き継ぐことができるため、データローミングは非常に重要です。

20140714130531

 

ローカル設定データ

以下の名前空間を追加します。

 

ローカル設定データは、LocalSettingというコンテナーにキーと値をセットにしてデータを保存します。

データを復元するときは、ContainsKeyを使ってキーがすでにあるかどうかを判定しましょう。

 ローミング設定データ

データが同期される設定データは、RoamingSettingに保存します。 保存方法はLocalSettingと同じですが、この設定データは異なるデバイス間の同じアプリで同期されます。

データ復元

 ローカルファイルデータ

大きいファイルを保存する場合は、LocalFolderにStorageFolderを作って保存しましょう。

StorageFildeのCreateFileAsyncメソッドを使ってファイルを作ります。

今回はFileIOクラスのWriteTextAsyncでテキストデータを書き込みます。

 

データ復元は、GetFileAsyncでデータを取得します。

その前に、GetFilesAsyncでファイル一覧を取得し、データが保存されているかどうかを判定します。

 

ローミングファイルデータ

ファイルもデータローミングすることができます。

RoamingFolderに先ほどと同じようにファイルをつくり、書き込みます。

データ復元

 

サンプル

スペースキーを押すと、スコアが保存され、次回以降の起動でスコアがロードされます。

104

 

 

サンプルコード

SampleGameMono_10_SaveData.zip

 

目次




加速度センサーの入力を検知する

加速度センサー

ほとんどのWindowsタブレットには加速度センサーが付いています。

加速度センサーはデバイスを傾けるだけで入力をすることができるのでよりゲームが直感的になります。

 
加速度センサーを利用するにあたって、「どの軸を固定とした回転か」を考える必要があります。

以下の図のように

デバイスの上向きをY軸、

デバイスの横向きをX軸、

デバイスの奥向きをZ軸

として座標軸考えます。

 

6

 

加速度の値はちょうど軸の向きが重力と同じ向きになると1.0、重力と逆向きで0.0の値をとります。

 

 

X軸固定回転

デバイスのX軸を固定とする回転は、AccelerationY値とAccelerationZ値が変化します。

3

 

 

Y軸固定回転

デバイスのY軸を固定とする回転は、AccelerationX値とAccelerationZ値が変化します。

 

4

 

Z軸固定回転

デバイスのZ軸を固定とする回転は、AccelerationX値とAccelerationY値が変化します。

 

5

 

Accelerometer

加速度センサーを利用するには、Accelerometerクラスを使います。

以下の名前空間を追加しましょう。

 

Accelerometerクラスのインスタンスをメンバに追加します。

 

InitializeメソッドでAccelerometerのGetDefaultメソッドでAccelerometerのインスタンスを取得します。

もし、デバイスに加速度センサーがついていなければGetDefaultメソッドがnullを返します。

ReportIntervalでどれだけの間隔で加速度センサーの値を更新するかを決定します。

 

UpdateメソッドでGetCurrentReadingメソッドをもちいて現在の加速度センサーの値を取得します。

 

サンプル

 

BvuQVKWCEAEsVHK

 

 

サンプルコード

SmapleGameMono_9_InputAccel.zip

 

目次




ゲームコントローラ入力を検知する

ゲームコントローラ入力

複雑なWindowsゲームとなると、どうしてもタッチやマウスだけでは対応できなくなります。

より快適にゲームをプレイしてもらえるように、MonoGameはゲームコントローラの入力にも対応しています。

しかし、ゲームコントローラはだれでも持ってるわけではないので、あくまでオプションのような位置づけで実装します。

 

XInput

XInputとは、XBox360のコントローラからの入力を検知するAPIとしてDirectXに実装されています。

MonoGameでも同じようにXInputに対応したコントローラの入力を検知することができます。

また、HID(ヒューマンインターフェースデバイス)対応である場合、WindowsRuntimeでは外部ドライバを使わずに標準で認識することができます。

Windowのゲームを作るにあたってはXBox360のコントローラが推奨ですが、XInputやHIDに対応したコントローラならば対応することができます。

 

95

 

96

 

 

各ボタンの取りうる値

Button

ボタンはButtonState列挙型によって、PressedかReleasedのどちらかの値をとります。

  • StartButton
  • BackButton
  • A Button
  • B Button
  • X Button
  • Y Button
  • DPad Left
  • DPad Right
  • DPad Up
  • DPad Down
  • Right Shoulder
  • LeftShoulder

はすべてButtonStateの値を返します。

Thumb Stick

Thumb Stickはスティックで4方向の入力を受け付けます。

一つの軸に対して、-1.0~1.0までの連続的な値を返します。

97

99

98

100

 

Trigger

トリガーは右と左についていて、0.0~1.0までの連続的な入力を受け付けます。

どれだけ深く入力しているかを検知することができます。

101

102

 

 

GamePad

ゲームパッドからの入力を受け付けるにはGamePadクラスのGetStateメソッドを実行します。

GetStateメソッドでPlayerIndex列挙型を与えて、何番目のコントローラかを判断します。

コントローラは最大4つまで受け付けることができます。

以下の名前空間を追加します。

 

 

サンプル

 

103

 

 

サンプルコード

SmapleGameMono_8_InputGamePad.zip

 

目次