第四回 

テレポート(一対一)

 

第四回目はテレポ―トで対戦などを想定した一対一の状況で使えるもので

相手を基準とした位置に移動するためのスクリプトの解説です

相手を基準とは相手の目の前に出現など

相手の位置によって移動距離が変わるというものです

 

相手の位置により移動距離を決めるため

自分と相手の位置を数値化する必要があり

最初に1Pと2Pに別の処理をさせるため1Pと2Pを判別させます

スクリプトに最初からあるステージフェイスの最初に

「変数による分岐」を付け空いてるキャラ変数に

変数使用のチェックを入れて「データ:X座標」を設定します

ステージフェイスはゲームシステムの基本の「位置:1P顔」「位置:2P顔」

表示場所を設定でき変数にステージフェイスのX座標を代入することで

1P2Pで別の数値を入れることができ数値により判別できるようになります

「位置:1P顔」「位置:2P顔」のX座標の中間くらいの変数をいれ

○○以上ならなどで1P2Pを判別すると楽です

 

1P2Pを判別できれば いよいよ計算です

格ツクは画面サイズX640×Y480になってます

Xは横軸でYは縦軸の数値で単位は1ドットです

1P側が変数にX座標の数値を足して

2P側が変数にX座標の数値を引けば

その差額が間合いの距離になります

互いの位置が入れ替わって引く数値の方が大きくなっても

数値がマイナスになるだけで数字自体は変わりません

1Pがx座標40の位置で2Pがx座標400の位置にいたとすると

40−400=-360になり間合いは360ドットなのが分かります

1Pがx座標400の位置で2Pがx座標40の位置にいたときは

400−40=360になり引く側と足す側が入れ替わっても360ドットなのが分かり

出た数値分のドット数を移動すれば相手と重なる位置に移動できる計算になります

座標移動でドット単位で移動するには

3ケタ目の数値が重要になります

上の画像では3ケタ目に1が入っていてこの状態だと

1フレームあたり1ドット移動します

これを先ほど1P2Pのx座標の計算で出た数字分を

1フレームで移動できるドット数に変換すれば相手の位置に移動でき

そこから出現したい場所分の移動距離の数値を足せば

テレポートの基本は完成になります

 

ここからはスクリプトを組む説明に入ります

まずはプレイヤーのX座標を知るための処理をさせるため

プレイヤーにオブジェクトを貼りつけます

先ほどステージフェイスでキャラ変数にX座標を入れていたので1P2Pを分岐します

320は画面の中央にあたり2Pが画面みぎに設定してある場合を想定して

「以上だったら」に設定し2Pの処理に飛ばしてます

(1P2Pのステージフェイスがともに中央より右などは数値を変更してください)

 オブジェクトの設定は「親と同期」「無条件」を設定してください

親と同期させることで常にキャラに張り付いた状態にします

出現OBJ設定はこの先でスクリプトを作り終えたら設定します

もう一つの4番目の命令のオブジェクトも同じ設定をしますが

こちらは2P側の設定となりますので

1Pと2Pで同じオブジェクトの命令を通らないように

「SG」の移動などで飛ばすように設定してください

上の画像のスクリプトでは1Pは2番目のオブジェクトの命令

2Pは4番目のオブジェクトの命令のみを通るようにしてます

 

次は1P側のX座標を変数にプラスするスクリプトです

まずはスイッチを入れるスクリプトです

Xの座標を入れる変数はシステム変数を使いますここではkを使用してます

スイッチにも同じシステム変数kを使うことで変数を節約します

テレポート系の技が発動するとk変数に10000代入されて

スイッチが入るシステムに設定してます

システム変数Kが0の時は「I」の画像呼出に行きWAIT1で見えない画像を設定して

そのあとに「SG」の移動で再び最初に飛んでループするようにしてます

後半は変数を入れる設定です

先ほどの変数による分岐でシステム変数kに数字が入っていれば

左から5番目の「V」の変数による分岐に飛ばせます

ここではシステム変数kにデータ:x座標を「足して」ください

次に「I」の画像呼出を設定してWAIT1で見えない画像を設定します

そして「V」の変数による分岐を設定して

システム変数kが0と同じならこのスクリプトの最初に飛ぶようにせっていします

最後に「SG」で6番目の「I」の画像呼出に飛ばして

システム変数kが0に戻るまでループさせます

1P側の座標の割出の設定はこれで完了です

 

続いて2P側のx座標を変数にマイナスするスクリプトです

変数は直接マイナスすることができないためすこし複雑になってます

最初のスイッチを入れるスクリプトは1Pと同じです

こちらも同じシステム変数kが0以上になれば後ろのスクリプトに飛びます

続いてx座標分をマイナスするスクリプトです

ここではタスク変数にx座標代入します

例としてタスク変数:Mを使用しております

タスクMに代入させた後タスクMとシステム変数kを-1する設定をループさせ

タスクMが0になるまで繰り返せば

x座標の数値分をシステム変数kからマイナスすることができます

ただし1フレーム内でのループには限界があるので

百の桁や十の桁分まとめてマイナスする必要があります

そこでまずは百の桁以上であるか十の桁以上であるかを判別させます

先に+99以上だったらを設定しそのあとに+9以上だったらを設定します

○○以上だったらは一つ上の数字から適応なので+99と入れると100から適応されます

この後に1の桁をマイナスするスクリプトを組みます

 システム変数とタスク変数に-1を「足す」設定を入れればKOです

百の桁と十の桁の飛び先も同じ要領で

マイナスする数字を百の桁なら百倍 十の桁らな十倍の数値に設定してください

そして計算の後に「SG」の移動の命令を付けて

ループするための設定に飛ばします

ループはタスクが0なら計算をストップして

システム変数:kが0になるまで待機するループに飛ばします

そしてそのあとに「SG」の移動の命令をつくって

タスクMが+99以上ならの変数分岐にとばしてください

 

システム変数:kが0になるまでの待機のループは

「I」の画像呼出で透明が画像を設定しWAITは1に設定して

次に「V」の変数による分岐で

システム変数kが0と同じなら

このスクリプトの最初に飛ばすように設定してください

最後に「SG」の移動で再び「I」に飛ばせば

システム変数が0に戻るまでのループは完成です

これで1Pと2Pの設定が完了し

変数の誤差で間合いが分かるようになります

 

ここからはメインのテレポートに関するスクリプトです

スクリプトの流れは

移動前のモーション

スイッチを入れるための変数の追加

システム変数を移動に変換する処理

出現or攻撃

という流れになります

 

移動前のモーションですがどんなものでもOKです

空中に移動などしても大丈夫です

 

次にスイッチを入れるための変数の処理です

変数を入れるタイミングはシステム変数を移動に変換する処理の

2フレーム(2WAIT)前にしてください

スイッチを入れてオブジェが変数を入れるのに1フレーム間を置かないと

不具合が起こる可能性があります

スイッチに入れる変数はシステム変数Kに1万の数値を「代入」してください

スイッチを入れるための変数はいくらでもいいのですが

x座標などと被りにくいものの方がとび先が間違ってたりしたときにわかりやすいです

そしてこの変数を入れる時と

システム変数を座標移動に変換が終わるまでは

食らい判定は入れないでください

変数を代入したまま処理が行われず食らいモーションに飛ぶと

使用されずに残った変数が不具合の原因になります

もし食らい判定を入れる場合は食らいモーションの最初に

ここで使用しているシステム変数を0にする処理をおこなってください 

 

続いてはシステム変数を座標移動に置き換える作業です

このスクリプトは主に4項目に分かれてます

黄色の部分は分岐

青はシステム変数:kがマイナス時の計算

赤はシステム変数:kがプラス時の計算

緑はこの後に出現や攻撃につなぐ命令です

黄色から赤か青に行った後に緑に行く構造になります

 

最初は黄色の部分の分岐の設定です

まずは一番左の「V」の変数による分岐です

これは2キャラが同時にテレポートをしたときに

バグが起きないようにシステム変数:kが0の時は

右から2番目の緑の「M」の座標移動の命令に飛ばす設定にしてください

とび先はまだ解説してないので完成時に設定してください

同時にテレポートを出した場合後に処理が行われる方は

システム変数がすでに使われていて0になっているためこの処理を行います

 

次はスイッチで入れた分の変数を取り除く命令です

-10000を「足す」の設定で入れてください

 

3つ目は一見最初の命令と一緒に見えますがこれは

x軸が重なっていた時の為の処理です

ジャンプやすり抜けなどでまれに重なる時があり

その時は座標の誤差が0になるので

バグが起こらないように入れます

とび先は右から2番目の緑の「M」の移動の命令よていです

 

次はプラスかマイナスかでどちらにとばすかの命令です

システム変数:kが0以上ならに設定しプラス時の計算の最初にとび先を設定ます

プラス時の計算のスクリプトが完成したとき

プラス時の計算の最初の部分につないでください

先にプラス側に飛ばす設定をしたのであとに設定るす「SG」の移動は

マイナス時の計算のスクリプトに設定することになります

マイナスの計算のスクリプトが完成したら移動先を

マイナス時の計算の最初に設定してください

これでは黄色の分岐は完成です

 

続いては青で囲ってあるシステム変数がマイナス時の計算の解説です

計算のやり方は2P側のx座標マイナスした時のものに近いです

 まずはシステム変数を座標移動に変換するにあたって

システム変数が百以上や十以上の場合に

まとめて計算するための分岐の設定です

マイナスの計算なので-99「以下だったら」と設定してください

十の桁の場合も-9「以下だったら」に設定します

そしてそのあとに一の位計算を入れます

 マイナス計算なので0に近づけるため システム変数:kに+1を「足す」

そして座標移動のX軸の移動も+1.00を入力し「足す」にチェックを入れます

3桁目に1.00入れることで1フレームに1ドット移動でき

これを変数分座標移動に足せば間合い分進めることになります

そしてそのあとに「SG」の移動を設定しておきます

百の桁の計算はこの百倍の数字

十の桁の計算はこの十倍の数字を足す設定をいれます

百の桁の計算の後には「SG」の移動を設定して

十の桁の計算は百の桁の計算の右側に設定してください

十の桁の後の設定は

計算が完了した時に飛ばすためのシステム変数:kが0と同じだったらを設定します

とび先は右から2番目の緑の「M」の座標移動に設定よていです

システム変数:kが0と同じだったらを設定した「V」の隣に

まだ変数が残っている状況のため

「SG」の移動を設定します

飛び先はシステム変数が-99以下ならと設定した「V」に設定して

ループさせるようにしてください

これでマイナス時の計算は完了です

 

次はプラス時の計算です

赤の部分の計算になりますがマイナスの計算のスクリプトとほぼ一緒です

違いはプラスの計算なので

システム変数:kが99「以上だったら」に設定などです

十の桁も9「以上だったら」に設定してください

上のマイナス時ではシステム変数:kを+1を足していた設定を

プラス時なので-1を「足す」に変えてください

百の桁と十の桁の計算もシステム変数:kに

プラスになっていた部分をマイナスに変えて下さい

座標移動の方は前に進むのでそのままでOKです

 

最後は一番右の緑の部分のスクリプトです

緑の最初の命令の「M」の座標移動は

出現位置の設定になります

今のままでは相手とピッタリと重なった位置に出現しますので

ここで任意の数字を「足す」設定を入れます

X軸の移動にマイナスを入れることで相手の少し前に出現でき

Y軸も設定可能でマイナスの状態だと少し上に出現することができます

ただしY軸の移動がプラスだと地面にあたって

うまく移動できない可能性があります

次の「I」の画像呼出は

「WAIT」の数値が「1」であればどの画像を使ってもOKです

WAITが「1」以外の数字だとすすむ距離が増えてしまうため

必ず「1」にしてください

次の「M」は座標移動のリセットの設定です

一つ前の「I」で移動が完了しているため

ここでリセットしておけば不測の事態を防げます

リセットの仕方はすべての方向の数値を0にして

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

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

出現後取りたい動作のスクリプトに飛ばしもらえば完成です

 

かなり説明が長いものになってしまいました

飛び先も多いので不具合が出る場合は

とび先などがずれてる可能性もありますのでチェックをおねいがいします

テレポートはストーリーモードなどで相手が複数いる場合は

座標を計算するオブジェクトを付けるキャラを一人に絞ってください

また技が発動時相手後ろにいる場合も対応できてません

ゲームによっては頻繁に後ろにいる場合があるかもしれません

その場合は移動の計算処理の前に

後方に攻撃判定だけを出してヒット時は

別の移動の計算スクリプトに飛ばし座標移動をマイナスで計算してもらえれば

後ろに対応できると思います

これ以外にもいくつか後ろに対応する方法もあるので

状況にあったスクリプトを設定してください

 

念願のテレポートのスクリプトの解説ページも無事設定できました

シルフルでものちの更新でキャラにテレポートを入れていく予定です

説明が雑でまだまだ精進が足りないため

わかりにくいとこが多々あると思いますがご了承ください

次回は今回紹介した

計算のスクリプトを紹介したいと思います

ループでの変数計算は後に

かなり使うことになると思うので先にまとめて紹介しておけば

解説のコーナーも短くまとまるのでは思ってます

ライフ計算などもまた解説できれば面白いかなと思ってますので

いろいろと書く記事をまとめておかないとですね〜

 


 

inserted by FC2 system