では前回の続きです。
今回はタッチした座標を画面に表示できるようにしてみます。
え、そんなの秒じゃん。って思いますよね?
なにせUnityでは
public Text text;
void Update(){
text.text = ""+Input.mousePosition;
}
こんな感じに書いてTextにアタッチすれば表示されるといったひじょーにシンプルに簡単にできちゃいますよね。
しかしMonoGameではそうはいきません。なぜなら
「テキストを表示するにはまず事前にフォントをビルドする必要があるから」
なのです。
???ってなると思うんですが簡単にいうとフォントを事前に画像にしておき、その画像を表示する必要があるということです。
ではやっていきます。
フォントをビルドする
まずはフォントをビルドします。
Shared内のContentフォルダー内にあるContent.mgcbを開きます。
開くとこのような画面になるのでContentにAdd→New Itemでメニューを開き、Sprite Fontを追加します。
そうするとフォルダ内に「(任意の名前).spritefont」といったファイルが作成されていると思うのでそれをテキストエディタ等で開きます。
するとこんな感じのが開けると思います。このファイルは(おそらく)ビルドするフォントの設定を行うものだと思います。
今回デフォルトのままだと文字が小さすぎたので<Size>の部分を36に変更してみました。
それらが出来たらビルドを行います。
エラーが出なければ成功です。
これでフォントファイルが出来たので表示させていきたいと思います。
文字を表示してみる
SpriteFont font;
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
font = Content.Load<SpriteFont>("SPFont"); // ここで読み込み
}
まずはLoadContent()内でContent.Load<SpriteFont>(“ファイル名”)を使ってフォントデータを読み込みます。
protected override void Draw(GameTime gameTime){
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.DrawString(font, "Hello", new Vector2(10, 10), Color.Black, 0, Vector2.Zero, 1, SpriteEffects.None, 0); // 文字の表示
spriteBatch.End();
base.Draw(gameTime);
}
その後spriteBatch.DrawString()で文字を表示すればOKです。
このように表示されれば成功です。
タッチされた座標を取得してみる
タッチした座標を取得するにはTouchPanel.GetState()を使います。
(名前空間:Microsoft.Xna.Framework.Input.Touch)内にあるのでusingして使います。
GetStateではTouchCollectionが取得できます。
(おそらく)これはタッチしている指のリストでそれぞれの指の状態を表しています。
これを使いタッチしている指の座標を表示していきます。
Vector2 mousePos; // 指の座標
var stats = TouchPanel.GetState();
if (stats.Count > 0) mousePos = stats[0].Position;
else mousePos = new Vector2(-1, -1);
Countでタッチしている指の数を取得できるのでタッチしている場合(Count>0)は一番目の指(stats[0])の座標を取得し、タッチしていない場合は(-1,-1)をmousePosに入れるようにしました。
※stats[0]は正確にいうと「タッチしている指の中で一番最初にタッチした指」です。
実行してみて座標が表示されたら成功です。
お疲れさまでした!
次回は簡単なゲームを作っていこうと思います!
ここまで読んでくれてありがとうございました!!
ホームページでは他にも
・様々な記事や作った作品および過程
・ソースコード、素材ファイル
・あらゆる”モノ”の作り方
などなど随時、記事や作品を新規公開・更新していますので是非見ていってくださいね!見ていただけると本当に嬉しいです!