Async Input

TurboWarp拡張機能 · 利用者ガイド

入力を、どのスクリプトからでも。

Async Inputは、キー操作、スプライトのタップ、累積ポーズをTemporary Variablesの ランタイム変数につなぎます。どのスクリプトからでも最新値を読み取れ、値の更新と 同時にメッセージを送ることもできます。

紙芝居DSL 4.0集約ランタイム

集約パレットから、このガイドを開けます

Async Inputの見出し直下にあるドキュメントボタンを使います。 集約されたブロックも、ここで説明するキー入力、スプライトのタップ、ポーズ、ランタイム変数、 broadcast、所有権、自動解放の動作を保ち、名前空間とアイコンで由来を識別できます。

クイックスタート

4ステップで準備完了

プロジェクト開始時にリスナーを登録します。登録ブロックは入力を待たず、 ランタイム変数も初期化しないため、初期値は明示的に設定してください。

  1. 依存する拡張機能を読み込む

    先にTemporary Variablesを追加します。次にAsync Inputをカスタム拡張機能として、 サンドボックス化せずに実行を有効にして読み込みます。

  2. 値を初期化する

    Temporary Variablesでinputscoreなどのランタイム変数を作ります。 算術更新を使う場合は0などの数値を設定します。

  3. リスナーを登録する

    Async Inputの「listen」ブロックを緑の旗が押されたときの下に置きます。 実行したスプライト、クローン、ステージが登録の所有者になります。

  4. 押す・タップする・ポーズする

    一致する入力でランタイム変数がすぐに更新されます。「and broadcast」付きの ブロックは、更新後にScratchのメッセージを送ります。

登録後に起きること

メッセージを送る場合も、必ず先にランタイム変数が更新されます。

拡張機能のURL

レビュー済みのバージョン固定ビルドを使用してください: @kubohiroya/turbowarp-async-input@0.4.0

使用例

入力元を選ぶ

配布ビルドにはキーとタッチのブロックが含まれます。累積ポーズのブロックは任意機能で、 poseInputフィーチャーフラグを有効にしたビルドでのみ表示されます。

⌨ キーボード

Spaceキーで1点加算する

緑の旗が押されたとき
ランタイム変数 score0 にする
キー Space をlistenしてランタイム変数 score+1 にする

キーIDにはKeyboardEvent.codeを使います:KeyADigit1ArrowLeftSpaceEnterなどです。

☝ タッチ/クリック

スプライトをタップして送る

緑の旗が押されたとき
ランタイム変数 input にする
このスプライトのtouchをlistenしてランタイム変数 inputtapped にし actor-tapped を送る

ポインター位置で最前面に描画されているスプライトだけが一致します。透明部分と クローンの判定はTurboWarpレンダラーの動作に従います。

◇ 累積ポーズ · 任意機能

「jump」が有効になったら反応する

緑の旗が押されたとき
ランタイム変数 posewaiting にする
累積ポーズ jump をlistenしてランタイム変数 posedetected にする

累積ポーズのスコアリングと変更イベントを有効にしたTMPoseが必要です。有効な累積 ポーズ名が登録名に変わったときに実行されます。

アプリケーション統合

ブロック登録なしで候補入力を待つ

バージョン0.3.0では、ポーズ、物理キー、最前面actorのタッチ候補を待機する 副作用のないComposition APIを追加しました。

イベント元を注入

@kubohiroya/turbowarp-async-input/compositionをimportし、利用する pose、key、actor-touchのイベント元だけを渡します。import時にScratch、DOM、 TurboWarp VMへアクセスしません。

最新の待機を優先

3種類の待機は1つの所有権を共有します。有効な待機を始めると前の待機を中止し、 中止、完了、失敗、releaseAll()で直ちに購読を解除します。

ターゲットごとの所有

登録はターゲットごとに独立

同じターゲットから同じ入力を再登録すると、そのターゲットの登録だけが置き換わります。 別のスプライトやクローンは、同じキーやポーズをそれぞれ独立してlistenできます。

1つの物理キーに3つの独立した登録

KeyAを1回押すと、一致するターゲット所有の登録がすべて更新されます。

タッチはターゲット固有

  • 通常のタッチリスナーは、登録したスプライトまたはクローンに属します。
  • ステージは「このスプライト」のタッチブロックを登録できません。
  • actor互換ブロックは、呼び出し元を所有者のまま、名前付きactorに結び付けます。

登録は自動的に片付く

  • ターゲットを削除すると、そのターゲット所有の登録も削除されます。
  • 緑の旗、すべてを止める、ランタイム破棄で全登録が削除されます。
  • 途中で削除したいときはstopブロックを使います。

値の扱い

文字列の代入と数値の計算

値が+-*/で始まる場合は 複合算術更新になります。それ以外は入力した文字列がそのまま代入されます。

例:Spaceキーで2を加算
VALUE動作必要な初期値
+22を足す有限の数値
-11を引く有限の数値
*33を掛ける有限の数値
/22で割る有限の数値、0でない除数
pressed文字列をそのまま代入なし

無効または有限でない算術計算では現在値を変えず、その登録のメッセージ送信も行いません。

ブロック一覧

listenとstop

「listen」ブロックは動作を登録または置換してすぐに処理を返します。「stop」ブロックは、 実行したターゲットが所有する登録だけに作用します。

キーボード · 既定

  • listen for key …:ランタイム変数を書き換えます。
  • listen for key … and broadcast …:書き換えてからメッセージを送ります。
  • stop listening for key …:キー1個の登録を削除します。
  • stop all key listeners …:このターゲットのキー登録をすべて削除します。

タッチ · 既定

  • listen for touch on this sprite …:ランタイム変数を書き換えます。
  • listen for touch … and broadcast …:書き換えてからメッセージを送ります。
  • stop listening for touch …:このターゲットのタッチ登録を削除します。
  • listen for touch on actor …:紙芝居連携用の互換ブロックです。

累積ポーズ · 任意機能

  • listen for accumulated pose …:ポーズ名の変化時に書き換えます。
  • stop listening for accumulated pose …:ポーズ1個の登録を削除します。
  • stop all pose listeners …:このターゲットのポーズ登録をすべて削除します。
  • stop all input listeners …:このターゲット所有の入力登録をすべて削除します。

トラブルシューティング

反応しないときは

項目を開くと、よくある原因と最短の解決方法を確認できます。

listenブロックでTemporary Variablesが必要と表示される

TurboWarpのTemporary Variables拡張機能をAsync Inputより先に読み込み、プロジェクトを 再開してください。Async Inputはその拡張機能のランタイム変数APIを利用します。

キーが一致しない

入力文字ではなく物理キーコードを使います。aではなくKeyA1ではなくDigit1です。キーリピート、IME変換中、編集可能な コントロール内でのキー入力は意図的に無視されます。

あるスプライトではタッチできるが、別のスプライトではできない

listenが必要なスプライトまたはクローンごとに登録ブロックを実行します。レンダラーが 最前面として選んだスプライトだけが一致し、ステージは「このスプライト」のタッチ登録には使えません。

ポーズブロックが表示されない

ポーズ入力は独立して切り戻せるposeInputフィーチャーフラグの背後にあり、 配布ビルドではOFFです。ポーズ対応ビルドには、累積スコアリングと変更イベントを有効にしたTMPoseも必要です。

算術更新で値が変わらない

ランタイム変数を有限の数値で初期化します。未作成の値、数値でない文字列、0除算、 オーバーフロー、有限でないオペランドは、現在値を変えずに拒否されます。

緑の旗を押す前は動いたが、押した後に動かない

プロジェクトの開始と停止では、設計上すべての登録が消去されます。listenブロックを 緑の旗が押されたときの下に置き、実行ごとに必要な登録を作り直してください。