XXX4Fans
シガタケ from fanbox
シガタケ

fanbox


(無料記事)StgBuilderの使い方-8(スクリプト)

●StgBuilderの使い方(一覧)


実践方法については過去の解説やサンプルデータを解析して貰うとして

スクリプトのお作法と、キャラ間の変数のやりとりについて

初心者が躓きやすい要素を中心に

覚えておいた方が良いポイントを解説しようと思います。

●スクリプトの基本

スクリプトの組み方は大別して

「①ループする」「②ループしない」の2種が存在します。

「①ループする」場合、最低限1周するのに1フレーム必要です。

0フレームでループさせると「無限ループ」状態に陥り、処理が正常に機能せず

エラーメッセージが表示されるので注意が必要です。

自機やメニュー等、入力に対して反応のあるスクリプトを組む場合

1周1フレーム(毎割込み処理)が基本となります。

・パネルの「進行方向」は「下」か「右」を選択する事ができます。

・移動先が「空白」の場合、下に移動します。

・パネルとパネルの間に「空白」があっても問題ありません。

・行数に関わらず、一番下まで移動すると「GATE」に戻ります。

パネルを増やす際、「IN・OUT」を使った接続が基本となります。

1フレーム内の処理(空白やパネル数)が多すぎると

「無限ループ」を検出する事があるので、その場合は

空白を削る、タスクを分散する等の工夫が必要になる…筈ですが、

最新版のStgBuilderで確認した所、これだけ↓並べても「無限ループ」を

検出しなかったので、アップデートで上限が緩和されたのかも…?

「②ループしない」場合、最後のパネルが

「進行方向.無し(矢印を表示させない)」

「制御.通過(時間待ち.動作完了まで=無期限ウエイト)」

「制御.タスク停止(該当のタスク番号を指定)」

「制御.消滅」(キャラクタを消す時に使用)

のいずれかである必要があります。

●スクリプトパネルの基本

スクリプトパネルは大別して

「移動」「回転」「拡大縮小」「カラー」などの

「①変化に要する時間が必要なパネル」

「②変化に要する時間が不要なパネル」の2種が存在します。

①には「変化に要する時間」「移動に要するフレーム数」などの項目があり

項目がないものはほぼ②に該当します。

(以降1フレーム→1fと表記)

①のパネルが「変化に要する時間=1f(最小値)」の場合

「時間待ち.動作完了まで」を指定すると

1f経過してから次のパネルへ移動する事になり、

「時間待ち.なし」の場合、変化を待たずに次のパネルへ移動します。

同じ属性の「変化に砲する時間が必要なパネル」

「時間待ち.なし」で複数並べると上書きされるので注意が必要です。

複数の属性の「変化に要する時間が必要なパネル」

1fで同時に処理したい場合は

最後のパネルに「時間待ち.動作完了まで」を指定します。

「変化に要する時間」が60fの場合、「時間待ち.動作完了まで」

を指定すると、60fの間はそれ以外の処理ができなくなりますが、

「時間待ち」で手動でフレーム数を指定をする事で

「変化処理」をしながら任意のタイミングで

別の処理を挟む事が可能になります。

「変化に要する時間が不要なパネル」に関しては、一部を除き

「時間待ち.無し」と「時間待ち.動作完了」の設定に差異はないと思われます。

●「制御.ループ開始-ループ終了」

同じループ番号同士を、ループ回数分繰り返します。

「同じ動作を数回繰り返した後、次の動作に移行」等を作る時に役立ちます。

●「攻撃.ショット」

(緑キャラが自機に向かって3way弾を発射しているイメージ)

①「攻撃.ショット」が「発射回数:1」の場合

「時間待ち」の有無に関わらず、同時にAとBを重ねる事が出来ます。

②「攻撃.ショット」が「発射回数:2~」の場合

「発射間隔」によるウエイトが発生する為、「時間待ち:動作完了まで」

が入っていると、Aの処理が完了してから、Bの処理に移行します。

③「発射回数:2~」「時間待ち:なし」の場合

AがBで上書きされるので、Aは初弾を除き発射されなくなります。

④「発射回数:2~」の「攻撃.ショット」を同時に複数出したい場合

「攻撃.ショット」後に「消滅」する、「ショット用キャラクタ」を作成

それを「子生成」で貼り付ける事で、同時に複数発射が可能になります。

(シグナル送信を扱うキャラの場合、IDの重複に注意が必要です)

●「移動.回転」

①時計回りに240度回転させたい場合、目標角度を「240」にすると

角度AからBに近い方が優先される為、目標角度「-120」と同じ挙動になります。

②目標角度を「120」「120」に分割すると、時計回りに240度回転します。

●「移動.直交座標」

①目標座標を絶対値で指定する

→画面の座標に対して絶対値で移動します

②目標座標を相対値で指定する

→自分のいる位置から相対値で移動します

※①②は、「移動に要するフレーム数」を指定します。

「等速」以外に「加減速」の指定も可能です。

「☑目標到達時に停止する」で移動後に停止させる事もできます。


③移動力を絶対値で指定する

→「移動力100=1fに1ピクセルの移動」という解釈で大丈夫そうです。

④移動力を相対値で指定する

→相対値なので、重ねがけが可能です。毎フレームY値を加算する事で

 自由落下のような表現が可能です。

※③④は、「移動に要するフレーム数」「加減速」の影響は受けません。

●「制御.振動」

パッドを振動させる「制御.振動」パネルは少し特殊で

「モーター0」と「モーター1」の振動情報はゲーム全体で1つだけです。

キャラAで「モーター0」を振動中、キャラBで「モーター0」を振動させると

キャラAの「制御.振動」パネルが、キャラBの「制御.振動」パネルに

置き換わるような挙動をします。

その際、振動強度だけでなく指定した振動フレーム数も置き換わるので

キャラAのタスクのf数に影響を与えてしまう事になります。

(回避方法)振動のみ担当の「振動キャラ」を作成

キャラA、キャラBが、振動させたいタイミングで「振動キャラ」を発射

→f数に影響を与える可能性を「振動キャラ」のみに限定する

●「座標・移動量・回転・拡大」等を直接指定する方法

「移動」パネルを使わず「変数.ローカル」パネルで

直接変数で「座標・移動量・回転・拡大」等の値を指定する事も可能です。

(但し直接指定なので「数フレームかけて変化」等の処理は苦手)

例えば「移動.拡大縮小」パネルでは、縮尺を「整数%」で指定する為

 「99%と100%の中間」を指定する事はできませんが

変数で指定する場合は「0~100%→0~65536」になる為

「99.5%→65028」といった、細かな指定が可能です。

逆に、現在のローカルの「拡大率」を変数として取得する事も可能です。

その他、色々な情報を「変数.ローカル」経由で取得&指定できるので

一度種類を確認しておく事をオススメします。

●タスクの種類について

(メイン)メインで使用するタスク

(ユーザー用1~)ユーザーが自由に使えるタスク

(攻撃ヒット)「攻撃」がヒットした時に起動するタスク

(防御ヒット)「防御」がヒットした時に起動するタスク

(破壊)攻撃を受けてHPが0になると起動するタスク

最低限これだけ理解しておけばOKです。


(ユーザー用1~)のタスクを使用する時は

「右クリック→ゲート作成」で「GATE」を作成した上で

「タスク編集→自動実行☑」か「制御.タスク開始」パネルを使って

指定のタスクを起動する必要があります。


(攻撃ヒット)(防御ヒット)のタスクは

ヒット判定が発生する度にタスクが再起動されるので

毎フレームヒット判定が発生すると

最初の1fの処理を繰り返す事になります。


(破壊)タスクも同様に

攻撃を受けてHPが0になる、という状態が毎フレーム続くと

最初の1fの処理を繰り返す事になります。

破壊タスク起動直後に「制御.消滅」で消す場合は問題ありませんが

(スコア計算や演出の都合等で)1f以上の処理が必要な場合は

最初に「制御.フラグ 防御判定を持つ→OFF」を設定して

防御判定を外し、タスクの再起動を防止する必要があります。


余談ですが、HPを-1以下に設定すると、被弾してもHPが0には戻らず

破壊タスクが自動起動しなくなる為、無敵キャラになります。

その上で(防御ヒット)タスクの中に、特定の条件で

「制御.その他(破壊)」もしくは「制御.タスク開始(11)」

を設定する事で、破壊タスク条件の自作可が可能になります。

●変数の受け渡し方法

「キャラA」と「キャラB」の2種が存在すると仮定して

「キャラA」から「キャラB」に変数を渡すには

「システム変数」を介する必要があります。

「キャラA」→「システム変数」→「キャラB」


「キャラA」が「キャラB」を「攻撃.ショット」で発生させる場合

「☑自分のParam_A.Bを渡す」を使用して

2種の変数を渡す事が出来ます。


「キャラA」が「キャラB」を「攻撃.子生成」で発生させる場合

「シグナルの受送信」を利用して、変数を渡す事が出来ます。

親が消滅すれば子も消滅する等、親子関係には制約がありますが

最近のアップデートで「攻撃.親子解除」パネルが追加されたので

変数を渡した後に分離する事が可能になったようです。


(子生成時のIDについて)

子生成時に割り振ったIDを使用して、シグナルの受送信をします。

複数のキャラを「子生成」で発生させた際、子のIDが重複していると

シグナルが正しく受送信できなくなるので注意が必要です。

(シグナルを使う場合、子は最大16種まで設定可能です)




(無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト) (無料記事)StgBuilderの使い方-8(スクリプト)

Related Creators