ひろじいべーしっくch 第29回の動画の解説・補足。(0-029)
ここでは、サンプルプログラム「ボール入れ」の説明のほか、ハイスコア保存の方法、VIBRATE命令を紹介しています。
プログラム
今回のプログラムはこちら。(公開キー443E4X1、LOAD“N29_BALL”)
本プログラム、「ボール入れ」はジョイコンの加速度センサーを傾けることによってボールを間接的に真ん中に示すゴールまで誘導し、かかった時間を競うゲームです。
このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。
一部の内容を省略している箇所があります。
詳細を知りたい方は公式リファレンス等も参照してください。
[]については省略可能ですが、一部の命令(例えばDIM命令等)については最低一つの[]は必要です。
RIGHT$
RIGHT$(文字列,文字数)
文字列の末端から指定文字数分の部分文字列を取得する。
文字列の右側から文字数分を取り出すよ。
引数
文字列
対象文字列
文字数
取得文字列の文字数
返値
取得した文字列
例
S$=RIGHT$(“ABC”,2)
SPCOL
SPCOL スプライト番号,始点X,始点Y,幅,高さ[,スケール対応]
スプライト衝突判定情報を設定する(範囲指定付)
・SPHIT系の命令を使う前に必ず呼ぶこと。
・SPSET前に使うとエラー。
・SPCOLで始点X,始点Yを指定する場合、SPHOMEの情報は全く使用しない。
引数
スプライト番号
対象のスプライト番号:0~4095
始点X,Y
・判定領域の始点座標:X,Y(-32768~32767)。
・スプライト左上を原点(0,0)とした相対座標。
幅,高さ
判定領域の幅と高さ:W,H(1~65535)
スケール対応
1を指定するとSPSCALEやSPANIMでのスケール変更に合わせて衝突判定の大きさが変化する
0を指定するとスケール変更しても衝突判定の大きさは変化しない
・省略時は0。
動作の説明
※ACLS命令の位置が3行目にあり、2行目の画面設定がリセットされています。ゲーム上では特に影響がありませんが、プログラムとしては無駄な記述となっています。詳細は動画内の4分27秒あたりをご覧ください。(ANDから&&への変更の話もあります。)
動画の4分30秒
以下は、おおまかな動作の説明です。概略図は以下の通りです。
実行画面
動画の2分26秒
改造版
今回の改造版は時間の測定をTIME$からMILLISECに変更し、ハイスコアを別のファイルに保存して、プログラムが終了してもハイスコアを出した者の名前やハイスコアが残る仕様になっています。
LOADV
LOADV(“ファイル種類:ファイル名”)
ファイルの内容を読み込んで文字列または配列として返す
・実行結果はRESULT関数で取得できる。
・RESULTの値は、成功時は1、失敗時は0、キャンセル時は-1となる。
引数
ファイル種類
DAT,TXT,GRPを指定可能
・省略できない。
ファイル名
読み込むファイル名
返値
読み込んだファイルの内容
・DAT,GRPを指定した場合、DAT,GRPファイル内のデータを格納した配列を返す。
・DAT,GRPファイルの読み込みに失敗した場合は要素数0の1次元整数解列を返す。
・TXTを指定した場合、TXTファイル内容の文字列を返す。
・TXTファイルの読み込みに失敗した場合は空文字列を返す。
例
TX$=LOADV(“TXT:MEMOFILE”)
DT=LOADV(“DAT:DATAFILE”)
動画内で作成されていないファイルを読み込んだ際に、空白が書き込まれることを確認したプログラム
LOADV “ファイル種類:ファイル名”,配列
LOADV “ファイル種類:ファイル名”,配列
ファイルの内容を配列に読み込む
・実行結果はRESULT関数で取得できる。
・RESULTの値は、成功時は1、失敗時は0、キャンセル時は-1となる。
引数
ファイル種類
DAT,GRPを指定可能
・省略できない。
ファイル名
読み込むファイル名
配列
読み込んだデータが格納される配列変数
・読み込むファイルに格納された配列データの次元と、読み込み先配列の次元は一致している必要がある。
・文字列配列を指定する場合、ファイル内のデータも文字列配列をセーブした物である必要がある。
・ファイル内の情報に応じて配列要素数が自動的に拡張される。
例
DIM MARRAY[]
LOADV “DAT:MDATA”,MARRAY
SAVEV
SAVEV “ファイル種類:ファイル名”,変数
変数の内容をファイルに保存する
・上書き保存時は上書き前のファイルが @BACKUP.TXTまたは@BACKUP.DAT として保存される。
・実行結果はRESULT関数で取得できる。
・RESULTの値は、成功時は1、失敗時は0、キャンセル時は-1となる。
引数
ファイル種類
TXT,DAT,GRPを指定可能
・省略できない。
ファイル名
保存ファイルに付ける名前
変数
セーブしたいデータを格納した変数
・TXTの場合文字列変数を指定する。
・DATの場合配列を指定する。配列の型や次元には制限がない。
・GRPの場合2次元の整数配列を指定する。
例
SAVEV “TXT:MEMO”,TX$
DIM MAP[10,10]
SAVEV “DAT:MAP”,MAP
DIM IMG%[32,32]
SAVEV “GRP:IMG”,IMG%
RESULT()
RESULT()
一部命令の実行結果を取得する
・DIALOG, ファイル操作命令, XCTRLSTYLE等の、実行結果を取得する必要のある命令の実行結果を返す。
・RESULTを更新する命令の実行後に使用する。
返値
命令の実行結果
・結果の値は各命令により異なるが、共通要素としてすべての命令で1は成功、0は失敗をあらわす。
動画内でRESULTやSAVEVの効果を確認したプログラム
LEFT$
LEFT$(文字列,文字数)
文字列の先頭から指定文字数分の部分文字列を取得する
引数
文字列
対象文字列
文字数
取得文字列の文字数
返値
取得した文字列
例
S$=LEFT$(“ABC”,2)
DELETE
DELETE “[ファイル種類:]ファイル名”
ファイルを削除する
・実行結果はRESULT関数で取得できる。
・RESULTの値は、成功時は1、失敗時は0、キャンセル時は-1となる。
引数
ファイル種類
削除したいファイルの種別
・省略時はTXTを指定した事になる。
ファイル名
削除したいファイル名
例
DELETE “TEST”
DELETE “GRP:PICTURE”
実行画面
袋とじ(バイブ機能)
今回はSwitchのジョイコンの機能である振動の機能に着目し、その振動機能を管理するVIBRATE命令を紹介しています。この命令は4つの異なる書式があり、4通りの効果(通常、詳細な使い方、状況の返値を表示する、停止)があります。
VIBRATE コントローラID[,左右指定],振動パターン番号
VIBRATE コントローラID[,左右指定],振動パターン番号
コントローラーを振動させる
・サブプログラムからの呼び出しは無視される。
引数
コントローラID
振動させたいコントローラID:1~4
・コントローラーID0は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
左右指定
振動させたいコントローラの左右指定
0 左
1 右
・省略時は左右両方が振動する。
・縦持ち、横持ちの場合、1を指定しても無視される。
振動パターン番号
プリセットの振動パターン番号:0~62
・0を指定すると振動が停止する。
例
VIBRATE 1,40
VIBRATE 1,0,1:VIBRATE 1,1,3
動画内で62種類のVIBRATE命令を連続して実行させたプログラム
VIBRATE コントローラID[,左右指定],低帯域周波数,低帯域振幅,高帯域周波数,高帯域振幅
VIBRATE コントローラID[,左右指定],低帯域周波数,低帯域振幅,高帯域周波数,高帯域振幅
周波数と振幅を指定してコントローラーを振動させる
・サブプログラムからの呼び出しは無視される。
引数
コントローラID
振動させたいコントローラID:1~4
・コントローラーID0は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
左右指定
振動させたいコントローラの左右指定
0 左
1 右
・省略時は左右両方が振動する。
・縦持ち、横持ちの場合、1を指定しても無視される。
低帯域周波数
振動周波数 (Hz)
・0を指定すると振動が停止する。
低帯域振幅
振動の振幅:-128.0~127.0
・0を指定すると振動が停止する。
高帯域周波数
振動周波数 (Hz)
・0を指定すると振動が停止する。
高帯域振幅
振動の振幅:-128.0~127.0
・0を指定すると振動が停止する。
例
VIBRATE 1,440,127,220,64
VIBRATE(コントローラID[,左右指定])
VIBRATE(コントローラID[,左右指定])
コントローラの振動状態を取得する
引数
コントローラID
振動状態を取得したいコントローラID:1~4
・コントローラーID0は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
左右指定
左右どちらの振動状態を取得するかの指定
0 左
1 右
・省略時は左右の状態を合成した値が返る。
・縦持ち横持ちの場合、1を指定すると常に0が返る。
返値
・振動している場合は、振動パターン番号または周波数・振幅を直接指定している場合には65535。
・振動していない場合は0。
・縦持ち横持ち以外で左右指定を省略した場合、右状態値*65536+左状態値が返る。
・縦持ち横持ちで左右指定を省略した場合は左状態値のみ返る。
例
PRINT VIBRATE(1,0)
VIBRATE
VIBRATE
全コントローラーの振動を停止する
・サブプログラムからの呼び出しは無視される。
例
VIBRATE
改造版2
まとめ
1.RIGHT$やLEFT$、MID$
RIGHT$の返値は文字列の右側から指定した文字数分を取り出す。
LEFT$の返値は文字列の左側から指定した文字数分を取り出す。
MID$の返値は文字列の右側を0にして、そこからの開始位置から指定した文字数分を取り出す。中ほどの文字列を取り出します。
2.ファイルが無い場合の動きもよく知っておこう。
LOADV命令でファイルが無い場合にはメッセージがでますが、そこでプログラムは終了しません。文字列の場合には空白が代入されます。このことからRESULT命令を用いて読み込みエラー結果によりファイルを作成するなどのパターンの理解が重要になってきます。RESULT命令の理解がハイスコア保存などのポイントとなります。
3.振動の種類は実質62種類
まずは、Switch本体の振動の設定を確認してください。今回は振動の紹介を中心にしたので、改造版2では40番の振動しか採用していませんが、特徴的な振動がたくさんあるので、いろいろためしてみましょう。
コメント