SmileBASIC 4.4.8
リファレンスマニュアル
更新日 2023/12/07
目次
- 命令概要(基本命令)
- 命令概要(表示命令)
- 命令概要(入力、サウンド、その他)
- ダイレクトモード専用命令
- 変数や配列の定義、操作に関する命令
- 制御命令
- 数学関連
- 文字列操作
- その他
- 各種入力
- 各種入力(Toy-Con)
- ファイル
- スクリーン制御
- テキストスクリーン入出力
- グラフィック
- スプライト
- レイヤー
- サウンド
- 高度な演算
- ソースコード操作
- サブプログラム
更新日 2023/12/07
・設定した操作スタイルによって、接続可能なコントローラーの種類、想定する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カメラを使用したい場合1を、使用しない場合は0を指定する
・省略時は0。
・モーションIRカメラを使用する場合は操作スタイルを1(2本持ち)にする必要がある。
コントローラー接続画面を必ず表示するかどうかを指定する
・1を指定すると、コントローラー接続画面が必ず表示される。
・0を指定すると、設定が変わった時だけコントローラー接続画面が表示される。
・省略時は0。
・0だけを指定すると、コントローラーの操作スタイルを起動時状態にリセットする。
・XCTRLSTYLE 1,0,0,0と指定するのと同じ。
・接続確認画面の操作結果はRESULT関数で確認できる(1:成功, -1:キャンセル)。
・サブプログラムからの呼び出しは無視される。
数値のゼロのみ指定
・異なる値を指定するとエラー。
接続可能な最大コントローラー数
現在の操作スタイル
0 | フル |
1 | 2本持ち |
2 | 横持ち |
3 | 縦持ち |
0 | デフォルトコントローラー |
1~4 | 通常コントローラー |
・通常コントローラーのIDは接続したコントローラーのプレイヤーランプの点灯数に対応する。
・携帯モードコントローラーが使える場合、IDは常に1。
・デフォルトコントローラーは全接続コントローラーの入力を合成し、現在設定されている操作スタイルに関係なく、常に携帯モードコントローラー相当の入力として扱う。
・コントローラーID1~4を使用する場合は事前にXCTRLSTYLE命令で使用したい操作スタイルを設定しておくことを強く推奨する。
0 | 未接続 |
1 | 携帯モードコントローラー |
2 | Proコントローラー |
3 | Joy-Con 2本持ち |
4 | Joy-Con(L) |
5 | Joy-Con(R) |
0 | デフォルトコントローラー |
1~4 | 通常コントローラー |
・通常コントローラーのIDは接続したコントローラーのプレイヤーランプの点灯数に対応する。
・携帯モードコントローラーのIDは常に1。
・デフォルトコントローラーは全接続コントローラーの入力を合成し、現在設定されている操作スタイルに関係なく、常に携帯モードコントローラー相当の入力として扱う。
・コントローラーID1~4を使用する場合は事前にXCTRLSTYLE命令で使用したい操作スタイルを設定しておくことを強く推奨する。
0 | 未接続 |
1 | 携帯モードコントローラー |
2 | Proコントローラー |
3 | Joy-Con 2本持ち |
4 | Joy-Con(L) |
5 | Joy-Con(R) |
コントローラーの色をメイン色とサブ色の2つの色コードで返す
・取得した色コードは他の描画命令の色コードとして使用可能。
・コントローラーが未接続の場合はメイン、サブ共に黒が返る。
2本持ちや携帯モードの場合、左右のコントローラーの色を別々に取得できる
・横持ちや縦持ちの場合、右メイン色と右サブ色には黒が返る。
調べたいコントローラーのID
0 | デフォルトコントローラー |
1~4 | 通常コントローラー |
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
調べたいボタンのID
ボタンIDとボタンとの対応は次の通り
・ボタンIDとボタンとの対応は操作スタイル毎に異なる。
ボタンID | フル、2本持ち | 縦持ち | 横持ち |
---|---|---|---|
#B_RUP | Xボタン | 上ボタン | 上ボタン |
#B_RDOWN | Bボタン | 下ボタン | 下ボタン |
#B_RLEFT | Yボタン | 左ボタン | 左ボタン |
#B_RRIGHT | Aボタン | 右ボタン | 右ボタン |
#B_LUP | 上ボタン | ||
#B_LDOWN | 下ボタン | ||
#B_LLEFT | 左ボタン | ||
#B_LRIGHT | 右ボタン | ||
#B_L1 #B_SL |
L | SL | SL |
#B_R1 #B_SR |
R | SR | SR |
#B_L2 #B_S1 |
ZL | LまたはR | LまたはR |
#B_R2 #B_S2 |
ZR | ZLまたはZR | ZLまたはZR |
#B_LSTICK | Lスティック押し込み | スティック押し込み | スティック押し込み |
#B_RSTICK | Rスティック押し込み | ||
#B_RANY | A,B,X,Yボタンのいずれか | ||
#B_LANY | 上,下,左,右ボタンのいずれか | ||
#B_ANY | スティック押し込み以外のいずれかのボタン |
・方向ボタンの上下左右は、コントローラーを持った方向に対するボタン位置。縦持ちの「上」は横持ちの「左」となる。
知りたい状態の種類
・省略時は0。
0 | ボタンが押されている |
1 | ボタンを押した瞬間(BREPEAT対応あり) |
2 | ボタンを押した瞬間(BREPEAT対応なし) |
3 | ボタンを離した瞬間 |
指定ボタンが指定機能IDの条件を満たしていれば1、そうでなければ0
・1個のボタンの状態だけ取得したい場合は、もう一つのBUTTON関数のヘルプを参照。
調べたいコントローラーのID
0 | デフォルトコントローラー |
1~4 | 通常コントローラー |
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
ボタンIDに-1を設定すると、全ボタン状態をまとめて取得するようになる
・コントローラーIDだけ指定した場合も-1を指定した事になる。
知りたい状態の種類
・省略時は0。
0 | ボタンが押されている |
1 | ボタンを押した瞬間(BREPEAT対応あり) |
2 | ボタンを押した瞬間(BREPEAT対応なし) |
3 | ボタンを離した瞬間 |
指定したコントローラーのボタン状態がビット毎にセットされて返ってくる
ボタンが押されているか調べるには、次のようなプログラムを書けば良い
'ボタンに対応するビットをONにした値を作るには、1をボタンIDだけ左シフト(<<)すれば良い 'たとえば#B_RLEFTが押されているか調べたい場合 BTNBIT_RLEFT = 1 << #B_RLEFT 'ビット値を作ったら、BUTTON関数の結果とANDを求めて、結果が0以外なら押されている IF (BUTTON(0) AND BTNBIT_RLEFT) != 0 THEN PRINT "ひだりボタン"
・BUTTON関数の機能IDで1を指定した時の結果に影響する。
・全接続コントローラーに影響する。
リピート速度を設定したいボタンのID
・ボタンIDの詳細はBUTTON関数のヘルプを参照。
ボタンが押され始めてから、リピートが開始するまでのフレームカウント
リピートが発生してから次のリピートが発生するまでのフレームカウント
リピート速度を取得したいボタンのID
・ボタンIDの詳細はBUTTON関数のヘルプを参照。
ボタンが押され始めてから、リピートが開始するまでのフレームカウント
リピートが発生してから次のリピートが発生するまでのフレームカウント
調べたいコントローラーのID
0 | デフォルトコントローラー |
1~4 | 通常コントローラー |
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
0 | Lスティック |
1 | Rスティック |
・省略時は0。
・スティックが1本しかない時に1を指定してもエラーにはならず、X,Y共に0が返ってくる。
スティックの傾き情報
・横方向(X)には左<->右で-1.0<->1.0。
・縦方向(Y)には上<->下で-1.0<->1.0。
・操作をしていない時にはX,Y共に0が返る。
・XCTRLSTYLEでモーションセンサーを有効にしていない場合は正常な値が返らない。
調べたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
調べたいセンサーのID:0~1
・2本持ちの場合のみ、ID 1で意味のある値が返ってくる。
・省略時は0。
加速度センサーの値
・単位は重力加速度。
・Xは方向キー左右方向(右ボタン方向が正)
・Yは方向キー上下方向(下ボタン方向が正)
・Zはコントローラー表面に対して垂直方向(上向きが正)
・XCTRLSTYLEでモーションセンサーを有効にしていない場合は正常な値が返らない。
調べたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
調べたいセンサーのID:0~1
・ID 1は2本持ちの場合のみ有効。
・省略時は0。
各軸まわりのジャイロセンサーの角速度
・単位はラジアン/秒。
・Xはピッチ。
・Yはロール。
・Zはヨー。
・それぞれ正の向きに対して右ネジの回転する向きが正の値となる。
・XCTRLSTYLEでモーションセンサーを有効にしていない場合は全て0が返る。
・コントローラーを激しく動かしたり、長時間使用を続けると誤差が蓄積し正しい値を返さなくなるため、必要なタイミングでGYROSYNC命令を呼び出し角度をリセットする必要がある。
調べたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
調べたいセンサーのID:0~1
・ID 1は2本持ちの場合のみ有効。
・省略時は0。
各軸まわりのジャイロセンサーの角度
・単位はラジアン。
・Xはピッチ。
・Yはロール。
・Zはヨー。
・それぞれ正の向きに対して右ネジの回転する向きが正の値となる。
・命令を呼び出した直後のコントローラー姿勢がX:0,Y:0,Z:0となる。
・GYROSYNC命令を使用してから実際のリセットが行われるまで最大で1Vカウントの時間が必要。
リセットしたいコントローラーのID:1~4
・コントローラーID 0 は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
リセットしたいセンサーのID:0~1
・2本持ち以外の場合、1を指定しても無視される。
・省略時は0。
・サブプログラムからの呼び出しは無視される。
振動させたいコントローラID:1~4
・コントローラーID0は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
振動させたいコントローラの左右指定
0 | 左 |
1 | 右 |
・省略時は左右両方が振動する。
・縦持ち、横持ちの場合、1を指定しても無視される。
プリセットの振動パターン番号:0~62
・0を指定すると振動が停止する。
VIBRATE 1,40 VIBRATE 1,0,1:VIBRATE 1,1,3
・サブプログラムからの呼び出しは無視される。
振動させたいコントローラ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
振動状態を取得したいコントローラID:1~4
・コントローラーID0は指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
左右どちらの振動状態を取得するかの指定
0 | 左 |
1 | 右 |
・省略時は左右の状態を合成した値が返る。
・縦持ち横持ちの場合、1を指定すると常に0が返る。
・振動している場合は、振動パターン番号または周波数・振幅を直接指定している場合には65535。
・振動していない場合は0。
・縦持ち横持ち以外で左右指定を省略した場合、右状態値*65536+左状態値が返る。
・縦持ち横持ちで左右指定を省略した場合は左状態値のみ返る。
PRINT VIBRATE(1,0)
・サブプログラムからの呼び出しは無視される。
VIBRATE
・TVモードではTOUCH関数は有効な値を返さない。
マルチタッチで、タッチを開始したポイント順に、0,1,2,3…と9まで指定できる
・省略時は0。
0を指定すると、タッチ座標が表示されているBASIC画面内の座標に変換され、画面外のタッチはタッチされていない物として扱われる
1を指定すると、BASIC画面に関係なく液晶画面全体でのタッチ座標を取得する
・省略時は0。
タッチを開始してから現在までのフレームカウント
・タッチしていない場合にはゼロが返る。
タッチされている場合の座標
・タッチされていない場合は無意味な値が返る。
タッチされている場合のタッチ面積
・タッチされていない場合には無意味な値が返る。
0を指定すると、マウス座標が表示されているBASIC画面の座標に変換される
1を指定すると、BASIC画面に関係なく液晶画面全体でのマウス座標を取得する
現在のマウス座標
現在のホイール値
設定するマウス座標
0を指定すると、X,YをBASIC画面の座標として扱う
1を指定すると、X,Yを液晶画面全体での座標として扱う
・省略時は0。
・1個のボタンの状態だけ取得したい場合は、もう一つのMBUTTONのヘルプを参照。
マウスのボタン状態がビット毎にセットされて返ってくる
調べたいボタンのID
0 | 左ボタン |
1 | 右ボタン |
2 | 中央ボタン |
3 | ボタン4 |
4 | ボタン5 |
知りたい状態の種類
0 | ボタンが押されている |
1 | (使用不可) |
2 | ボタンを押した瞬間 |
3 | ボタンを離した瞬間 |
・省略時は0。
指定ボタンが指定機能IDの条件を満たしていれば1、そうでなければ0
・XCTRLSTYLEであらかじめIR使用フラグをONにしておく必要がある。
・サブプログラムからの呼び出しは無視される。
IRカメラを使用するコントローラーのID:1~2
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
IRカメラの認識方法を指定する
0 | クラスタリングモード |
1 | 撮影モード |
2 | モーメントモード |
・クラスタリングモードは明るい領域を矩形として認識する。同時に最大16個の領域を認識できる。
・撮影モードはIRカメラの撮像画像を画像として取得する。
・撮影モードで撮影したデータはIRSPRITEで表示する事ができる。データをBASICプログラム内に取り出す事はできない。
・撮影モード起動中は画面キャプチャが禁止される。
・モーメントモードは撮像範囲を8x6の小領域に分割し、それぞれの認識情報を取得する。
・XCTRLSTYLEであらかじめIR使用フラグをONにしておく必要がある。
・サブプログラムからの呼び出しは無視される。
IRカメラを使用するコントローラーのID:1~2
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
クラスタリングモードとするために0を指定する
IRカメラの照明を指定する
0 | 全て(遠+近) |
1 | 遠距離用のみ |
2 | 近距離用のみ |
3 | 照明OFF |
・省略時は0。
IRカメラの撮影ゲイン:1~16
・省略時は2。
IRカメラの撮影露出時間:7~600
・省略時は200。
クラスタとして認識する最小の面積(ピクセル数):0~76800
・省略時は3。
クラスタとして認識する最大の面積(ピクセル数):0~76800
・省略時は76800。
クラスタとして認識する最低の輝度:0~255
・省略時は150。
・XCTRLSTYLEであらかじめIR使用フラグをONにしておく必要がある。
・撮影モードで撮影したデータはIRSPRITEで表示する事ができる。データをBASICプログラム内に取り出す事はできない。
・撮影モード起動中は画面キャプチャが禁止される。
・サブプログラムからの呼び出しは無視される。
IRカメラを使用するコントローラーのID:1
・撮影モードでは1以外指定できない。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
撮影モードとするために必ず1を指定する
IRカメラの照明を指定する
0 | 全て(遠+近) |
1 | 遠距離用のみ |
2 | 近距離用のみ |
3 | 照明OFF |
・省略時は0。
IRカメラの撮影ゲイン:1~16
・省略時は8。
IRカメラの撮影露出時間:7~600
・省略時は300。
撮影画像のサイズを指定する
0 | 320×240 |
1 | 160×120 |
2 | 80×60 |
3 | 40×30 |
4 | 20×15 |
・イメージサイズが大きいほど転送に時間がかかる。320×240で最短4秒、以下サイズが小さくなるごとに4倍速くなる。
・省略時は2。
・XCTRLSTYLEであらかじめIR使用フラグをONにしておく必要がある。
・サブプログラムからの呼び出しは無視される。
IRカメラを使用するコントローラーのID:1~2
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
モーメントモードとするために2を指定する
IRカメラの照明を指定する
0 | 全て(遠+近) |
1 | 遠距離用のみ |
2 | 近距離用のみ |
3 | 照明OFF |
・省略時は0。
IRカメラの撮影ゲイン:1~16
・省略時は8。
IRカメラの撮影露出時間:7~600
・省略時は300。
・サブプログラムからの呼び出しは無視される。
IRカメラの使用を停止するコントローラーのID:1~2
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
IRカメラの状況を取得するコントローラーのID:1~2
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
IRカメラの状況
0 | 使用していない |
1 | 停止中 |
2 | クラスタリング起動中 |
3 | 撮影モード起動中 |
4 | モーメントモード起動中 |
・IRSTARTでIRカメラの使用を開始しておく必要がある。
IRカメラの認識結果を読み取るコントローラーのID:1~2
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
新しいデータを読み取るたびに1増えていく番号
・同じ番号を連続して取得した場合は、新しいデータがまだ受信できていない事を示す。
認識中のノイズレベル
・0~2の値が返り、値が小さいほどノイズが少なく、正確な値が取れている事を示す。
データ配列に含まれるデータの数
・クラスタリングモードの場合、認識したクラスタの数を示す。配列には各クラスタの情報が入る。
・モーメントモードの場合常に48。配列には撮影領域内を横8×縦6に分割した各ブロックの情報が入る。
読み取った認識結果を格納した配列
・幅8の2次元配列。
・高さは0~データ数-1までに意味のある値が入っている。
・座標の範囲はX:(0~320)Y:(0~240)。
・クラスタリングでのデータ形式は次の通り。
0 | クラスタX座標 |
1 | クラスタY座標 |
2 | クラスタ幅 |
3 | クラスタ高さ |
4 | クラスタのピクセル数 |
5 | クラスタの重心座標X |
6 | クラスタの重心座標Y |
7 | クラスタの平均輝度 |
・モーメントモードでのデータ形式は次の通り。
0 | ブロックの平均輝度 |
1 | ブロックの重心座標X |
2 | ブロックの重心座標Y |
・指定したスプライトには撮影画像がリアルタイムで反映され続ける。
・IRSPRITEで作成したスプライトは通常のスプライトと同様に扱う事ができる。ただしSPPAGEを設定した場合元に戻す事はできない。
・撮影モードの撮影データをBASICデータとして取得する事はできない。
・サブプログラムからの呼び出しは無視される。
スプライトと結びつけるIRカメラを持ったコントローラーのID:1
・IRSPRITEでは1のみ指定可能。
・コントローラーIDの詳細はCONTROLLER関数のヘルプを参照。
撮影画像と結びつけるスプライトのID:0~4095
調べたいキーのUSB Usage ID:0~255
知りたい状態の種類。
0 | キーが押されている |
1 | 使用不可(指定すると結果としてゼロが返る) |
2 | キーを押した瞬間 |
3 | キーを離した瞬間 |
・省略時は0。
キーが機能IDで指定した状態であれば1、なければ0
モディファイヤキーの押下情報をビットで返す
bit0 | Windowsキー |
bit1 | Shiftキー |
bit2 | Ctrlキー |
bit3 | Altキー |