ひろじいべーしっくch 第21回の動画の解説・補足。(0-021)
ここでは、サンプルプログラム「落ちるな」の説明のほか、「動画に訂正があったとき」、「演算子についての補足」、「フリー素材集「いらすとや」に関連する本動画上での変更」の情報を紹介しています。
プログラム
今回のプログラムはこちら。(公開キー443E4X1、LOAD“N21_OTIRUNA”)
女の子「おっちん」ちゃんを板から落ちないようにしよう!
スイッチ本体、あるいはジョイコンやコントローラーを左に傾けると左に走る様になります。右に傾けると右に走る様になります。水平になってもどちらかの方向にゆっくり動き出し、落ち着きがありません。
本プログラム、「落ちるな」は、モーションセンサーのうちジョイコンの加速度センサーを傾けることによって女の子を間接的に誘導(直接に操作できないが、反対側の傾きを大きくすることによって反対に誘導)し、板から落ちない様にするゲームです。

このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。
RESTORE命令など、一部の内容を省略している箇所があります。
詳細を知りたい方は公式リファレンス等も参照してください。
[]については省略可能ですが、一部の命令(例えばDIM命令等)については最低一つの[]は必要です。
XCTRLSTYLE
XCTRLSTYLE 最大接続数,操作スタイル[,モーションセンサー使用フラグ,IRセンサー使用フラグ[,接続画面表示フラグ]]
コントローラーの最大接続数、操作スタイル、使用機能を設定する。
・設定した操作スタイルによって、接続可能なコントローラーの種類、想定するJoy-Conの持ち方、取得できるボタン・スティックの種類、使用できるコントローラー機能が変わる。
・接続確認画面の操作結果はRESULT関数で確認できる(1:成功, -1:キャンセル)。
・サブプログラムからの呼び出しは無視される。
引数
最大接続数
接続したい最大のコントローラー数を指定する
・操作スタイルに応じて指定可能な値の範囲が異なる。
フル 1~2
2本持ち 1~2
横持ち 2~4
縦持ち 2~4
操作スタイル
設定する操作スタイル:0~3
番号 スタイル名 使用可能なコントローラー
0 フル 携帯モード、Joy-Con2本持ち、Proコントローラー
1 2本持ち Joy-Con2本持ち
2 横持ち Joy-Con(L)/(R)横持ち、Proコントローラー
3 縦持ち Joy-Con(L)/(R)縦持ち
モーションセンサー使用フラグ
モーションセンサー(加速度センサー、ジャイロセンサー)を使用したい場合1を、使用しない場合は0を指定する
・省略時は0。
IRセンサー使用フラグ
モーションIRカメラを使用したい場合1を、使用しない場合は0を指定する
・省略時は0。
・モーションIRカメラを使用する場合は操作スタイルを1(2本持ち)にする必要がある。
接続画面表示フラグ
コントローラー接続画面を必ず表示するかどうかを指定する
・1を指定すると、コントローラー接続画面が必ず表示される。
・0を指定すると、設定が変わった時だけコントローラー接続画面が表示される。
・省略時は0。
ACCEL
ACCEL コントローラーID[,センサーID] OUT X,Y,Z
加速度センサーの情報を取得する
・XCTRLSTYLEでモーションセンサーを有効にしていない場合は正常な値が返らない。
引数
コントローラーID
調べたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
センサーID
調べたいセンサーのID:0~1
・2本持ちの場合のみ、ID 1で意味のある値が返ってくる。
・省略時は0。
返値
X,Y,Z
加速度センサーの値
・単位は重力加速度。
・Xは方向キー左右方向(右ボタン方向が正)
・Yは方向キー上下方向(下ボタン方向が正)
・Zはコントローラー表面に対して垂直方向(上向きが正)
傾けると重力が検出されることについて
動画の12分39秒あたり。X方向(横方向)についてジョイコンを傾けたときに生ずる重力加速度です。XやY方向については重力×sinθが検出されます。

以下、検証についてのサンプルプログラムと、その実行画面です。
検証1(X方向。横)

検証1の実行画面

検証1の実行画面(動画の11分47秒あたり)

検証2(Y方向。縦)

検証2の実行画面

検証2の実行画面(動画の13分40秒あたり)

検証3(Z方向。奥と手前)

検証3の実行画面

検証3の実行画面(動画の15分4秒あたり)

Z方向については水平の状態の角度θを0度と設定した場合には、重力の影響を受けた加速度は重力×sin(θ-90°)として検出されます。
検証4(1台2本持ち。X方向)
センサーIDの0と1を設定した場合の検証です。動画内で使用するジョイコンの色に合わせて0番を緑(左側)、1番を赤(右側)として表示しています。

検証4の実行画面

検証4の実行画面(動画の15分18秒あたり)

補足としてのジャイロセンサーの説明
GYROV
GYROV コントローラーID[,センサーID] OUT X,Y,Z
ジャイロセンサーの角速度を取得する
・XCTRLSTYLEでモーションセンサーを有効にしていない場合は正常な値が返らない。
引数
コントローラーID
調べたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
センサーID
調べたいセンサーのID:0~1
・ID 1は2本持ちの場合のみ有効。
・省略時は0。
返値
X,Y,Z
各軸まわりのジャイロセンサーの角速度
・単位はラジアン/秒。
・Xはピッチ。
・Yはロール。
・Zはヨー。
・それぞれ正の向きに対して右ネジの回転する向きが正の値となる。
動画の17分42秒あたり。Xはピッチ

動画の17分57秒あたり。Yはロール。

動画の18分18秒あたり。Zはヨー

検証(Yow方向の角速度。角度毎秒。)

検証の実行画面

検証の実行画面(動画の18分47秒あたり)

GYROA
GYROA コントローラーID[,センサーID] OUT X,Y,Z
ジャイロセンサーの角度を取得する
・XCTRLSTYLEでモーションセンサーを有効にしていない場合は全て0が返る。
・コントローラーを激しく動かしたり、長時間使用を続けると誤差が蓄積し正しい値を返さなくなるため、必要なタイミングでGYROSYNC命令を呼び出し角度をリセットする必要がある。
引数
コントローラーID
調べたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
センサーID
調べたいセンサーのID:0~1
・ID 1は2本持ちの場合のみ有効。
・省略時は0。
返値
X,Y,Z
各軸まわりのジャイロセンサーの角度
・単位はラジアン。
・Xはピッチ。
・Yはロール。
・Zはヨー。
・それぞれ正の向きに対して右ネジの回転する向きが正の値となる。
検証1(Yow方向の角度。女の子のスプライトの表示付)

検証1の実行画面

検証の実行画面(動画の20分31秒あたり)

検証2(Yow方向の角度。女の子のスプライトの表示を検出角度に合わせる)
正面からのYowについて反時計回りとなることに対し、SPROTの方向が時計回りであるため、10行目の変数DZの符号を反対(マイナス符号)とすることで、見た目が同じになる様にしています。

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

ラベルMAINより上は画面の初期設定です。
ラベルMAINの中についての概略図は以下の通りです。

実行画面(1.起動直後)

実行画面(2.落下してところ。)

改造版
GYROA命令を利用して、傾きを検知し、それを板(改造版ではLINE命令での線になっています)と女の子(SPROT命令を利用しています)を傾斜させて描いています。ACCEL命令で既に検出した値があるのでそれを上記の描画に利用してもかまわないと思いますが、GYAROA命令の利用についての検証も兼ねています。
難易度の設定として、(1)スコアともにスピードをあげる、(2)30000点での強制終了という2点を追加しましたが、後半は特に画面に意識しなくても左右にシャッフルする様に交互に傾き続けるだけでゲームが進行する様になるので、あまり改善した様には見えていません。

実行画面(1.起動直後)

実行画面(2.強制終了【30000点超え】)

補足(動画内での袋とじコーナー)
今回は、「動画等に訂正があったときの方法について」、「論理演算子についての補足情報」、「イラスト無料提供サイト『いらすとや』について」の3つが動画内で紹介されています。
補足1. 動画等に訂正があったとき
Youtube 削除後、新たにアップロードする方法のみ。
ニコニコ動画 基本的に削除後、新たにアップロードする方法。有償では「投稿後24時間以内」という制限で編集できます。
X(旧ツイッター) 基本的に削除後、新たにアップロードする方法。有償では「投稿後1時間以内」という制限で編集できます。
なお、動画投稿者にとっては、動画再生数(Xについては表示回数)が重要であることから、なるべく削除して新たにアップロードする方法は行いたくないことが自然です。従って社会的に影響しない誤りの情報である場合には、概要欄に訂正情報を載せることで削除する方法を回避することが優先されます。社会的に影響する誤りの情報である場合には、削除して新たにアップロードすることが賢明であると思います。
補足2. 演算子の補足情報
公式リファレンス https://sup4.smilebasic.com/doku.php?id=reference:top
公式リファレンスブック2019年度版 13頁
公式リファレンスブック2023年改訂版 19頁
演算子については、2つの数値の間に演算子を挟んだ記述が一般的で、その全体の値は
(1)計算、あるいは計算に似た演算によるものと、
(2)前回扱った比較によってその状態が正しければ1、正しくなければ0を返値とする
という、大きく2種類の演算がPRINT命令によって確認できます。
カッコや符号、NOTなど例外があります。
種類別(演算子の分け方)については2つあります。
「論理演算子」「整数演算子」「実数演算子」「その他」という分け方と
「単独」「算術演算子」「比較演算子」「他」という分け方があります。
演算子の優先順位の順番はおぼえておいた方が良いです。まずはじめは()が先、||が最後ということで、その他はマイペースで憶えていってください。
補足3. 「いらすとや」について
フリー素材集「いらすとや」について。
フリー素材集「いらすとや」公序良俗に反する目的での利用「ご利用について」

ここでは、「当サイトのイラストは以下の場合、ご利用をお断りします。」ということで以下の事項が掲げられています。
「公序良俗に反する目的での利用
素材のイメージを損なうような攻撃的・差別的・性的・過激な利用
反社会的勢力や違法行為に関わる利用
素材自体をコンテンツ・商品として再配布・販売
(LINEクリエイターズスタンプ等も含みます)
その他著作者が不適切と判断した場合」
また、「以下の場合、有償にて対応させていただきます。」とされています。
素材を21点以上使った商用デザイン(重複はまとめて1点)
素材の高解像度データの作成
本動画シリーズでは、「いらすとや」のイラストの一部の扱いを改めて利用することとしました。
まとめ
1. 加速度センサーは、設定されている方向に加速させずに傾けただけでも重力の影響で加速の値が検出されます。
2. ジャイロセンサーは軸に対してコマの様に回転している姿が基本的なイメージであり、その角速度や回転の角度が検出されます。
3. 演算子の優先順位の順番はおぼえておいた方が良いです。まずはじめは()が先、||が最後ということで、その他はマイペースで憶えていってください。
コメント