キャラにタッチ

BASIC入門編

ひろじいべーしっくch 第十回の動画の解説・補足。(0-010)

結論

TOUCH タッチパネルのタッチ情報を返すよ。

プログラム

今回のプログラムはこちら。(公開キー44425K433、LOAD“N10_TOUCH”)

本プログラム、「キャラにタッチ」は、最初に表示範囲を選択し、スプライト定義の絵(キャラクター)が表示され、その表示付近のグラフィック座標の頂点(ヨコ75,タテ75)と(175,175)を対頂点とする四角形の範囲の画面を指でタッチすると次のスプライトの絵が表示され、範囲外の画面をタッチすると、スプライトの絵の変化が止まって見えるものです。

このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。

詳細を知りたい方は公式リファレンス等も参照してください。

[]については省略可能ですが、一部の命令(例えばDIM命令等)については最低一つの[]は必要です。

TOUCH

TOUCH OUTタッチ時間,X,Y

読み方は「タッチ」。(以下の説明ではタッチID、座標系変換フラグ、タッチ面積の解説を省略しています。詳細は公式)。タッチパネルのタッチ情報を返します。TVモードではTOUCH関数は有効な値を返さないとのことです。

返値について

タッチ時間:タッチを開始してから現在までのフレームカウントです。タッチしていない場合にはゼロが返ります。

X,Y:タッチされている場合の座標(Xがヨコ、Yがタテ)です。タッチされていない場合は無意味な値が返ります。(今回のプログラムでは、直前の座標が残っている様です。)

SPDEF

SPDEF 定義番号,U,V[,W,H[,原点X,原点Y]][,アトリビュート]

読み方は「SPデフ」。動画内ではほとんど説明せず、また本プログラムでは使用していませんが、今回は「スプライト定義の絵」について関わるので説明しておきます。

プチコン4公式リファレンスブック(ISBN-13 : ‎978-4198652012)112頁からSPDEFで定義する際のグラフィックページ(GRP)が掲載されています。SPDEFという命令は、上記112ページから117ページにわたるグラフィックページ(テンプレート)の座標(タテU,ヨコV)から定義することができる命令です。

①GRP→②SPDEFによって内容が変わる→③SPSETの命令はスプライト番号(0から4095と有限ですがこの範囲内で自由に設定できます。)と②の内容に従って定義されている定義番号と紐づけを行う、という流れになります。

テンプレートのグラフィックページ(GRP)の座標(タテU,ヨコV)にあるグラフィックをUとVで指定します。

そのグラフィックの大きさをヨコWとタテHで設定します。中心点となる原点をXとYで指定できます。アトリビュートは90度回転や反転などの設定です。

SPSETの第5回0-005でも紹介しましたが、スマイルツールSBSMILE.PRGへの移動方法を再び紹介します。

SPDEF定義番号はシフトキーからコントロール(Ctrl)→SBSMILE.PRG→下のタブで右から2番目の「SPDEF定義」で紹介されている「スプライト定義の絵」の番号です。

【ゆっくり】BASIC入門# 5 ウォーキング【ゆるーいプログラミング解説】初心者向け動画の3分24秒あたり。SPDEF定義番号の確認。

【ゆっくり】BASIC入門# 5 ウォーキング【ゆるーいプログラミング解説】初心者向け動画の3分24秒あたり。SPDEF定義番号の確認。

SPDEFの使用例

1行目 SPDEF命令で、定義番号0番にGRPのヨコ192タテ352の場所のヨコ32タテ32の範囲を取得し、それをヨコ16タテ16を中心点とし、最後の1は90度時計回りに回転させて定義することを意味します。

この命令により、実行前は「いちご」の絵だった0番のスプライト定義の絵が変わります。

0番がいちごから90度傾いた男の人の顔の絵に変わった!

0番がいちごから90度傾いた男の人の顔の絵に変わった!

2行目 SPSET命令でスプライト番号に、上記の定義番号0番を紐づけます。

3行目 SPSHOW命令でスプライト番号0番の絵を表示します。

4行目 SPROT命令で現在のスプライト番号0番の絵をさらに時計回りに15度回転した状態にします。

5行目 SPOFS命令で現在のスプライト番号0番の絵をヨコ100タテ100の位置に移動して表示します。

実行結果

「SPDEFの使用例」の実行結果

現在SPDEFで定義している情報が、そのままSBSMILE.PRGで確認できる状態として表示されます。本プログラム(「キャラにタッチ」)はこれを拡大して描いています。よって、SPDEF命令を使用した際にはこの内容も書き換わり、本プログラムではそのままSPSETで定義しているので影響がでます。

この影響をデフォルトに戻す際には、ダイレクトモード等で単に「SPDEF」と入力すればもどります。

デフォルトに戻す際には、ダイレクトモード等で単に「SPDEF」と入力すればもどります。

0番がいちごの絵に戻った!

0番がいちごの絵に戻った!

動作の説明

おおまかな動作の説明です。

2行目で、ACLSで画面を消し、このプログラムでスプライト番号用に設定している変数Cに0を代入しています。

10行目は6行目で変数Sに3を入力、すなわちSPDEF定義(テンプレート)の番号(以下、定義番号。)8000番から表示させることを選択した場合には、最終の番号が8191であることから、8000から8191の192枚で済むので、繰り返す最小値は0、最大値である変数Mを191にしています。

13行目でSが1である時は定義番号0から4000をスプライト番号0から4000にセット(SPSET)しています。Sが2である時は定義番号4000から8000をスプライト番号0から4000にセット(SPSET)しています。Sが3である時は定義番号8000から8191をスプライト番号0から191にセット(SPSET)しています。

19行目で変数Cに代入されているスプライト番号(変数Cのスプライト番号)に設定されているスプライトの絵をヨコ100タテ100の座標を原点として表示しています(SPSHOWで描いています)。

22行目でタッチパネルのタッチ情報を変数TT、変数TX、変数TYに取得(代入)しています。23行目でキャラ付近の頂点(75,75)と(175,175)を対頂点とする四角形の範囲を押している、あるいは直前に押されていた場合にはTHEN以降を実行します。具体的にはまず現在のスプライトを隠し(SPHIDE)、変数Cを1追加し、もし変数Cが最大値Mを超えていたらCを0にして(繰り返しをするために)戻すことをしています。

24行目で現在の定義番号を変数Cと選択肢Sを用いて表示しています。

改造例

例(頂点(75,75)と(175,175)を対頂点とする四角形の範囲を押したときだけ絵を変化させる。)

タッチ時間を判定に加えることにより、手を放した途端に23行目の判定に該当しなくなることから、絵が止まって見える様になります。

なお、「条件式(A)&&条件式(B)」は「Aの条件とBの条件が両方成立するとき、(すなわちAかつB)」ということで、従来より紹介していた「条件式(A) AND 条件式(B)」とほぼ同じです。正確には「ANDは2つの整数の論理積(第4回0-004参照)を意味しており、純粋な条件式の論理積には「&&」を採用するという違いがあること、また、現代のプログラム言語の多くは「AND」と「&&」の違いを明確にし、複数条件が成立する論理積を採用する場合には「&&」を積極的に採用していることから、今回は「&&」を採用しています。

本動画の10分33秒あたり

詳細は動画「【Switch】ゲームを作る10 キャラにタッチ【プログラミング入門プチコン4】」の10分33秒あたりをごらんになって検証して下さい。

まとめ

命令文TOUCHについては、タッチパネルのタッチ情報のうち、タッチ時間やタッチした場所の座標を返します。(なお、タッチ面積や他の設定もあります。)

本プログラムではタッチ範囲のみを判定しているので、タッチがされる都度に対応が変化するか、あるいは前回と同じ場所にタッチしたのであれば変化しない仕様になっています。

改造例で解説した様に、タッチ範囲にタッチ時間を条件に加えた場合には、タッチ範囲内にタッチをしている間においてのみ反応する仕様にできます。

コメント

タイトルとURLをコピーしました