本記事はPythonistaのsceneライブラリの使い方について紹介するものです。
今回は、スマホをタッチした時の処理の実装方法について説明します。

具体的には以下の2点です。

・Pythonista+sceneタッチ(タップ)の基本メソッド
・Pythonista+sceneタッチ(タップ)の応用編

Pythonista+sceneタッチ(タップ)の基本メソッド

Pythonista+sceneタッチの基本
Pythonistaのsceneライブラリで使用できるタッチに関するメソッドは以下の3つです。

・touch_began():タッチした時に処理を実行する
・touch_moved():フリックした時に処理を実行する
・touch_ended():スマホから指を離した時に処理を実行する

いずれのメソッドも未定義にすることが可能です。
メソッドが複数定義されている場合は、
touch_began()→touch_moved()→touch_ended()
の順に処理されます。

引数の「touch」からはタッチした位置情報を取得できます。

touch_began():タッチした時に処理を実行する

touch_began()はスマホをタッチした時に処理を実行するメソッドです。
「瞬間的にタッチした場合」、「フリック入力した場合」、「長押した場合」のすべてで実行されます。

スマホタッチ処理の基本となるメソッドです。
まずはこのメソッドの使い方を覚えましょう。

◆記述例

touch_moved():フリックした時に処理を実行する

touch_moved()はスマホをタッチした場合(フリックした場合)に処理が実行されるメソッドです。
「瞬間的にタッチした場合」や「長押した場合」には処理されません。

指がちょっとでも動くと動いてしまうので扱いが難しいメソッドです。
スマホの画面を長押している時に指がずれて「touch_moved()」が動いてしまう場合もあります。

◆記述例

touch_ended():スマホから指を離した時に処理を実行する

touch_ended()はスマホから指を離したときに処理が実行されるメソッドです。
「瞬間的にタッチした場合」、「フリック入力した場合」、「長押した場合」のすべてで実行されます。

画面から指を離すまでは何も実行されません。

◆記述例

Pythonista+sceneタッチ(タップ)の応用編

Pythonista+sceneタッチ応用
「touch_began()」、「touch_moved()」、「touch_ended()」の3つをそのまま使うだけではあまり複雑な操作は実装できません。

複数のアクションを実装したい場合やタッチした長さで処理を変えたい場合などは工夫する必要があります。
ここからは少し応用的な使い方を紹介します。

具体的には以下の通り。

・タッチの長さで処理を変える
・タッチできる範囲に絞る

長押しで処理を変える

長押しで処理を変える
アクションゲームでよくある「溜めうち」や「溜めジャンプ」などタッチした長さで処理を変える方法について説明します。

上記の通りタッチの長さで処理を変えるメソッドはありません。
よって長押しで処理を変えたい場合は一工夫が必要です。

以前に以下のツイートでも方法を紹介しました。

Pythonista+sceneでスマホ画面をタッチした長さによって処理を変える

・touch_began()でカウントフラグを立てる
・update()で毎周カウントアップする
・touch_ended()でカウントを見て処理を変える

上記の具体的な実装方法について説明します。

◆1.touch_began()でカウントフラグを立てる
まずはスマホをタッチしたタイミング(touch_began()の処理タイミング)でカウントアップフラグを立てます。

タッチした瞬間にやる処理はこれだけです。

◆2.update()で毎周カウントアップする
カウントアップフラグが立っている場合のみカウントアップします。

◆3.touch_ended()でカウントを見て処理を変える
指を離したタイミング(touch_ended()の処理タイミング)でカウントの値を見て処理を変えます。
カウントのたまり具合によって2パターン以上の処理にわけることが可能です。

タッチできる範囲に絞る

「touch_began()」などのメソッドをそのまま実装すると画面全体がタッチ操作を受け付けます。しかしこのまま使うとあまり多くのアクションは実装できません。

タッチの範囲に絞ることでタッチした範囲によってアクションをわけることができます。

・ボタンをタッチした場合は攻撃
・ボタン以外の場所をタッチした場合はジャンプ

など。

Pythonistaとボタン

長押しとボタン設置の実装例

長押しとボタン設置の実装例について紹介します。

◆プログラム概要
ボタンを短く押すと小さなジャンプ。
ボタンを長く押してから離すと大ジャンプできます。

ボタン以外の場所にタッチしても何も起きません。

コードは以下の通り。

◆実行例

画面キャプチャなのでわかりにくいですが、長押し大ジャンプが可能で高い位置の星も取れます。

※アイテムを取る処理は今回のコードだけでは実現できません。
アイテムを取る処理については「Pythonista+sceneで当たり判定を作成する方法」をお読みください。

おすすめ記事>>Pythonistaでキャラクターをジャンプさせる処理を作成する

終わりに

Pythonistaのsceneライブラリで使用できるタッチに関するメソッドは以下の3つです。

・touch_began():タッチした時に処理を実行する
・touch_moved():フリックした時に処理を実行する
・touch_ended():スマホから指を離した時に処理を実行する

上記メソッドをそのまま使うだけだとできることがあまり多くありません。
しかし、update()で監視したりタッチの範囲を絞ったりするとタッチ操作だけでもかなり複雑な処理を作ることができます。

本記事やサンプルゲームも参考にしつつ試行錯誤をしてみてください。

Pythonistaについては「Pythonistaの使い方まとめ」にまとめています。