第二回 

重力設定付きの飛び道具の

停止と再起動

 

第二回目は前回の飛び道具の停止の応用で

重力が設定された飛び道具の停止と再起動を行う

スクリプトの解説になります

まずは格ツクにおいての重力の詳細です

座標移動の命令内にある重力の項目

これは設定した数字を1フレーム[1WAIT]ごとに

+していく設定になってます

このため斜め上に向かう軌道に

地面に向かう数値を入れておけば

放物線を描くような軌道をとってくれます

問題はこの重力の数値は

設定した数値の0.6倍の数値が

フレームごとに加算されているという設定であることです

そして設定できる数値が十分の一までであるのに対して

百分の一の数値が生まれてしまい

座標移動の設定では設定やフレームによっては

足すの設定は相殺して完全に止めることができないのです

とは言え飛び道具の再起動時は

ほぼ同じ軌道は再現できるので

よほど1ドットのずれも許されないような

スクリプトを組んで無い限りは大丈夫でしょう

 

今回のスクリプトも前回同様

移動のを担当するオブジェと

攻撃判定を担当するオブジェに分かれたものになってます

説明するのは移動を担当するオブジェです

 

今回は重力を使うため前回と少し違った感じに組むことになり

26〜30個のあたりの命令数になります

Eは見やすくするため2個入れてますがなくてもOKです

そして今回4つの項目に分けて組んでみます

見やすくすために項目別に色付けしてみました

飛び道具の項目は

部分の開始と通常移動

は停止時の設定

黄色は再起動時の座標移動の数値を入れるもので

は着地時の設定です(着地しないものは無くてOK

 

最初に左の青の部分から解説していきます

左から命令を順に説明していきます

まずは一番左の最初の「V」の命令です

一番左のVの命令はこのスクリプトで使うタスク変数の初期化になります

タスクは使われたスクリプトが終了すると初期化されますが

まれに残ってることがあると報告があるためバグ防止に初期化します

2番目「DS」

着地時の飛び先を命令です 条件分岐 技中有効から

着地したらを設定します オブジェは着地時に消滅しますが

バグ防止のため設定します 飛び先は後に設定しますのでまだ入れません

また着地後地面をはうものやバウンドなどの設定につなげることもできます

3番目「O」

オブジェクト発生の設定です

前回同様「親と同期」「無条件」の項目にセットしてください

出現座標のYは0または0以下のマイナスに設定してください

そうでないとこちらが先に着地してしまい出現させたオブジェが

画面に停滞する可能性があります

4番目「M」

座標移動でオブジェのメインの軌道です

好みの数値でOKで落ちるものから上に上がるもの

加速やブレーキがかかるものでも可能です

 

そして残りの4つの変数やとび先の設定です

右の紺色の部分をまとめて説明します

まずは「V」「I」「V」「SG」の4つの命令の

最初の「V」から設定します

先ほど設定したタスクと同じタスクを設定して

数値計算に+1を足す設定をします

これは何フレーム表示されたかを

カウントする設定になります

 

次に「I」画像呼出で前回同様透明の画像を設定し

WAITは1に設定してください

これは1フレームごとに後ろの命令に移動して

紺色で囲ったスクリプトをループできるようにするためです

1フレームごとにループすることで

ループと同じ数だけタスク変数が加算され

何フレーム表示されたかがわかることになります

 

3つ目の「V」システム変数も前回説明したもので数字が0以上の時は

オブジェが止まる設定に飛びます

まだとび先ができてないので設定は後回しに

とび先は赤で囲った最初の「M」の座標移動の予定です

 

最後の「SG」の移動先はタスクに+1を足す設定をした

3つ前の「V」に設定してください

この「V」の一つ前の「M」の座標移動に飛ぶと

重力で加算された数値が初期化されてしまうため

間違ってしまわないように注意にしてください

これで青部分の開始と通常移動の設定は完了です

 

続いて赤の部分の解説です

 

の設定は飛び道具停止の設定になります

前回で説明したシステム変数がオンになると

この赤の部分に飛んできてオブジェクトを停止させて

オフの0にシステム変数が戻ると

再起動の黄色の部分のスクリプトに飛ばす設定をします

 

赤のスクリプトの部分は

「M」「I」「V」「SG」の四つの命令になります

最初の「M」はオブジェ停止の設定ですべて0にして

「代入」にチェックを入れてくださいそして

先ほど青でシステム変数がオンになった時のとび先はここに設定します

 

画像呼出は先ほどと同様に透明なものをWAITを1で設定します

こちらも1フレームでループさせ

システム変数が0になった直後に再起動のスクリプトに飛ばせようにします

 

3番目の「V」はシステム変数がオンになってるかの判断です

0以上だったら内でループさせるための最初の

すべて移動が0に設定されてる「M」に設定します

 

そして最後の「SG」の移動の設定です

これは再起動時の設定の黄色の項目の

最初の座標移動の「M」に飛ぶ予定になります

一つ前の設定でシステム変数がオンになってる時は

停止設定に飛ぶためこの命令にたどり着く時は自然と

システム変数がオフになっている時になります

 

続は再起動の設定の黄色の部分の解説です

 

黄色の部分のスクリプトはこのスクリプトの要で

少し長めになってます

まずは最初の「M」の項目で赤で0になった座標移動の数値を戻します

入れる数字は青の項目の「M」で入れた移動と

まったく同じ数値にしてください

下の数字は一例になります

数字を入れた後は代入の項目にチェックをいれてください

しかしこのままでは重力で1フレームごとに

追加された分の数値が入ってません

なので元の軌道に戻すには重力で追加された数値分を計算して

足さなければなしません

まずは1フレームで足される数ですが

一例で設定した重力は20なのですが実際はこの0.6倍なので12になります

よって[重力が適応されていたフレーム×12]が

今まで足された重力の数値になり

それを割出足していくスクリプトを書いていくことになります

ここで最も気を付けないといけないのが

スクリプトのループの限界です

スクリプトは画像呼出を通さずにループを繰り返すと

200ループあたりで強制的に「E」エンドを適応されて

消えてします現象が起こります

なのでタスクでカウントしたフレーム数を

一回一回ループで足しているとあっという間にループの限界を

オーバーしてしまいます

そのため変数のとび先を桁別に分けてまとめて計算する必要があります

最初に百の位以上を百づつ引き残った十の位を十づつ

最後の一の桁を引けば999フレーム表示された計算でも

9×3(3は桁の数)で27ループ×桁分けなどで飛んだ回数になりかなり減らせ

それでも消え場合は5の単位で

さらに細かく計算を入れるとループをさらに減らせます

千フレーム以上表示でももう一桁千の桁の計算を増やせばOKです

ではその計算のスクリプトの解説です

まずはタスクの数値によって移動分岐をします

99と9以上になってますが格ツクの設定上

入れた数字より一つ上の数字が適応されます

0以上で0が適応されながよくわかる例かもですね

この設定で100以上の設定に

10以上で100未満なら10の桁の設定に飛ばすことができます

注意点は99以上ならの設定の方を先に行わないと

10以上100未満を判別できなくなるので気を付けてください

そして二つに当てはまらない場合1以上10未満ということになります

そして次の設定は1桁の時の計算の命令を入れます

 

重力が20だったのでその0.6倍の12を上のYの項目の移動の数値に入れます

またXの座標にも重力が設定されてた場合もXの移動の項目に

重力の0.6倍の数値を一緒に入れてください

そして足すにチェックをいれてください

そして一桁の計算なのでタスクも-1を足すの項目で入れます

十の桁らなこの十倍の数値を座標移動とタスクのマイナス設定に

百の桁なら百倍を設定します

上の設定は百倍と十倍の数値の計算の命令です

二つは「SG」の移動で区切って設定します

1の桁の隣のまるで囲った左は百の桁の設定にしてください

これは真ん中に位置しているので

他より一回多い2回とび先が設定されてあり

飛び回数を減らすため一番使用の少ない百桁をおきたいためです

百の桁の設定は先ほどの一の桁を丸ごと百倍に

十の桁は十倍に設定してください

十の桁も設定したら変数で最初に分岐した

99以上ならと9以上ならの項目とつなげます

つなぎ先の計算の桁数を間違えないように注意です

つなぎ終えたらその後ろに変数による分岐を設定します

 

 画像右の「V」の項目でタスクが0と同じだった

青の「V」のタスクに1を足す設定をしたスクリプトに飛ぶように設定します

タスクが0になるまで計算を施せば

停止前の軌道と同じ軌道の数値になり

のスクリプトにとんだあとに再度動き出します

この黄色の「V」あとに「SG」の移動の命令を作り

この移動で再び黄色の99以上だったらの項目に移動を設定します

タスクが0以上の時はこの移動で計算をループさせることができます

これで重力を加算する計算のスクリプトの完成です

そして中はこの黄色の部分には画像呼出は入れてはいけません

ここでの計算は1フレーム内のすべて行われて

の項目に移動することで停止から瞬時に

同じ軌道で再度動き出させるためです

これで黄色の項目は完成になります

 

残りは緑の着地の解説です

 

緑の項目は着地後の設定です

オブジェクトは地面に接すると判定で消えてしまいます

時にはそれが不具合につながる可能性があるので

画像呼出で透明な画像をWAIT1でいれて

青の着地後の設定をつなげればOKです

また地面に接した後他の行動もとらすことができますので

着地の設定を緑ではなく任意につなぐこともできます

 

最後に2個以上同時に飛び道具を出現させる時は?

 

飛び道具を2個同時に表示させても全く問題ないようです

これはタスク変数が同じスクリプト内でしか影響がないのと

オブジェ一つ一つが別のスクリプトとして認識されてるためと思われます

このため同じ技のオブジェが2個出現しても

どちらもしっかり止まってしっかり再起動されてるのを確認してます

ただし同じフレームで呼び出した場合は不具合が起こる可能性を残してますので

お気お付けください

 


ながながと長文でしたがここまで読んでいただきありがとうございました

次回は何か思いつき次第書いてみたいと思います

 

inserted by FC2 system