2D格闘ツクール2ndのバグ・よくあるミス

■ チュートリアル


■ コマンド解説


■ テクニック解説
 001 特殊なキャラクターセレクト
 002 画面レイアウト
 003 カラーセレクトの設定
 004 ヒットエフェクトの研究
 005 ヒットエフェクトの描き方
 006 スクリプト一覧のテキスト化
 007 通常立ちの設定
 008 VSで開始位置指定
 009 雛型キャラの作成
 010 INIファイルの内容
 011 変数の大小チェック
 012 当て身投げの作り方
 013 必殺技コマンドの設定
 014 アニメ作成_通常攻撃
 015 ゲームモードによる分岐
 016 変数の一覧を記録
 017 受け身入力の判定
 018 ダウン値による分岐処理
 019 飛び道具の作成
 020 ワープ技の作成
 021 ヒット硬直のコントロール
 022 ステージの地面表現
 023 ヒット数表示の固定
 024 横方向のホーミング攻撃
 025 1P/2Pの判別
 026 ライフ減少アニメ
 027 画面下部の表示内容
 028 ステータス表示の意味
 029 ガードクラッシュの表現
 030 押せないOBJ
 031 アイテムのあるゲーム
 032 復活する技の作成
 033 空ガードの作成
 034 ステージ選択付きキャラセレ
 035 ゲージMAXの表示
 036 固定ダメージを表現する
 037 ラン動作の作成
 038 投げ技によるKOの作成
 039 ボタン溜め押し技の作成
 040 中段攻撃の作り方
 041 製作に役立つツール
 042 カラーセレクトに適した画像
 043 相手によって動作変更
 044 横幅のあるキャラを表現
 045 ラウンド限定の動作
 046 影色の塗りを効率化
 047 モードを切り替えるキャラ
 048 当たり判定設定のコツ
 049 空中ジャンプを表現する
 050 キャラの向きを判別する
 051 途中でKOしない乱舞技
 052 カウンターヒットの作成
 053 OBJの動作を停止
 054 ハイジャンプの作成


■ バグ・よくあるミス


■ テスト時のチェック項目


■ 解説用データ ダウンロード


024

コマンドが左右反転する3

相手を飛び越える
相手を飛び越えた際、空中でコマンドの入力が左右反転する。
この問題についてはこれまでに何度か説明してきました。
コマンドが左右反転する
コマンドが左右反転する2

「コマンドが左右反転する2」のページでは
1P側/2P側のX座標を比較して相手を飛び越えているかどうかを判定、
その対策を説明していましたが、この対策には1つ盲点があり
画面端で相手を飛び越えた場合、コマンドの左右反転が起きてしまいます。

そこで、このページでは左右反転が発生する条件とその対策について
補足的に説明したいと思います。

 今回は「コマンドが左右反転する2」で行った対策の改良案となります。
 あらかじめ処理の仕組みを理解していることが前提となりますので十分に注意して読み進めてください。
 逆に言えば、対策の処理が完成していれば改良はそれほど難しくありません。


仕組みの説明抜きで修正手順だけ知りたい方は こちら からどうぞ。


現状の確認
上で説明した問題ですが、コマンド反転が起きるのは以下のような状況にいる場合です。
相手キャラが壁際にいて、自キャラが画面中央側から相手を飛び越えるようにジャンプした

ここからは実際のゲーム画面と合わせて問題の発生条件を詳しく説明します。

------------------------------------------------------------
ゲーム開始。
画面中央の自キャラ、右端の相手キャラ
画面左側中央)に自キャラが立っています。
一方、相手キャラは画面右端に立っています。
これはステージの右端であり、これ以上右にスクロールすることは有りません。

自キャラが相手キャラに近付いて、前方ジャンプを出します。
自キャラが右端に向けて前ジャンプ
ここで、自キャラは空中で出せる技を2つ持っています。

前方向キー2回入力で、空中前ダッシュ
後方向キー2回入力で、空中バックステップ

といった具合です。

自キャラが画面右端に触れました。
自キャラが画面右端に到達
この時、相手キャラに注目すると一瞬「振りむき:立ち」が発生していることがわかります。
画面端にも関わらず、飛び越えが発生しているという状況です。

ここで自キャラは前方向キーを2回入力、「空中前ダッシュ」を出そうとします。
空中前ダッシュが空中バックステップに化けた
しかし、相手を飛び越えているためにコマンドは左右反転してしまい
後方向キー2回入力である「空中バックステップ」が出てしまいます。

ここで画面上にある「B=C」という表示に注目してください。
詳しくは後述しますが、これは自キャラと相手キャラのX座標が同じ値であることを示しています。

MEMO

画面端での「めくり」
ゲームによってルールは様々ですが、
画面端にいる相手を飛び越えられるかどうかは
ゲームの駆け引きに大きな影響を与えます。

飛び越えられないルールの場合、
画面端にいる相手に対して「めくり」というテクニックは通用しなくなります。
格闘ツクールを使ってこういったタイプのゲームを作成する場合
別途、画面端での飛び越えを防ぐ処理を組むことになります。
( 画面端にいる時はキャラ上方に飛び越え防止用のぶつかり判定を出す、など )

一方、画面端でも相手を飛び越えられるルールの場合は
画面端にいる相手に対しても「めくり」のテクニックが使えます。
ただし、このルールを格闘ツクールで表現するためには
画面端でも飛び越えによるコマンド反転対策を用意する必要があります。


原因
コマンドが左右反転する2のページでは
自キャラのX座標と相手キャラのX座標を比較、
その大小を基準にして飛び越えの成立を判定していました。
キャラのX座標を比較
ただし、この判定には1つ盲点があります。

それは自キャラのX座標と相手キャラのX座標がぴったり一致する、というパターンです。
お互いのX座標が完全に一致
説明ページでは苦肉の策として
一瞬、飛び越える側のキャラに縦長のぶつかり判定を出すことで
X座標の完全一致を避けようとしていました。

しかし、今回のように画面端での飛び越えが有るゲームの場合は
両者のX座標が一致という状況が容易に起きてしまいます。
エディタ画面に見るキャラのX座標基準軸
両キャラの中央、縦に長く伸びているの部分がキャラのX座標になります。
ゲームのエディタ画面だと、キャラグラフィックの縦軸がX座標の基準位置となります。


対策
まず、X座標比較による飛び越え判定の処理を再確認します。
修正前のスクリプト
------------------------------------------------------------
元となるスクリプトの処理内容
スクリプトがごちゃごちゃと並んでいて見づらいですが
相手を飛び越えているかどうかを判定、
飛び越えている場合は空中での逆コマンドに処理を飛ばす。
飛び越えていない場合はコマンドをそのまま実行する
という処理になっています。

相手を飛び越える判定ですが、以下のパターンに場合分けして判定を行っています。
※空中前ダッシュの処理なので、自キャラは空中にいるという前提です

自キャラが右向きで、自キャラのX座標>相手キャラのX座標である
自キャラが左向きで、自キャラのX座標<相手キャラのX座標である


これに加えて自キャラと相手キャラ、どちらが1P/2Pなのかの判定が絡んでいます。

上の判定文を見ればわかる通り、以上・以下ではなく大なり小なりの比較となっています。
そのため「1P/2PのX座標が一致」というパターンが漏れしてしまうわけです。

------------------------------------------------------------
スクリプトの仕組み解説
下図ではスクリプトのかなめとなるブロックに色を付けてみました。
スクリプト追加の基準となる位置
水色になっているブロック、変数分岐の処理ですが
これが飛び越えの最終判断を行っている部分です。

スクリプト前半のSC命令( スクリプト呼び出し )にて
2つの座標の大小を変数処理で計算、得られた結果値を判定基準にしています。
変数値=0 → 座標1=座標2
変数値=1 → 座標1>座標2
変数値=2 → 座標1<座標2

水色ブロックの部分では後ろ2つのパターンを使っていますが
1番目のパターン、「変数値=0」の判定を省略しています。

------------------------------------------------------------
処理の追加
そこで、この「変数値=0」の場合の分岐処理をスクリプトに追加します。
処理追加後のスクリプト
水色ブロック各所の1つ後ろに赤色のブロックを追加しました。
設定内容は キャラ変数O = 0 なら「空中バックステップ」31へ
※変数の番号や飛び先はスクリプトの内容によって違ってきますので注意してください。

このブロック追加によって分岐処理などの飛び先設定にずれが生じるため、
スクリプトの設定を見直す必要があります。
チェックを忘れないようにしてください。

 「空中前ダッシュ」「空中バックステップ」のように
 2種類の逆コマンドをセットにしている場合は
 両者のブロック追加を済ませてから飛び先を設定するようにしてください。

------------------------------------------------------------
設定時のコツ
飛び先を修正する際は、スクリプト上に並んでいるブロックを
幾つかのグループとして見ると飛び先をイメージしやすいかもしれません。

一連の修正が済んだら、
対応する逆コマンド側のスクリプトについても飛び先設定の修正をしておきます。


テストプレーで動作を確認
修正が済んだら、テストプレーを実行して動作を確認します。

再びゲーム開始。
再び自キャラが前ジャンプ
左側の自キャラは画面右端の相手に対して前ジャンプします。

自キャラが画面端に到達。

飛び越えが発生したため、相手キャラは一瞬「振りむき:立ち」の動作を行います。
画面右端に到達
ここで自キャラは前方向キーを2回入力、「空中前ダッシュ」を出そうとします。
が、相手を飛び越えているため一旦「空中バックステップ」の処理に入ります。

そこから「空中バックステップ」スクリプト内でキャラの状態をチェックした結果、
自キャラと相手キャラの座標が同値で、「飛び越え」と判定。
「空中バックステップ」から「空中前ダッシュ」へと処理が戻されます。
今回はちゃんと「空中前ダッシュ」が出る
結果、キャラは画面端に向かって「空中前ダッシュ」を行います。
この時、座標比較の表示も「B = C」となっており
2キャラのX座標が一致していることを示しています。


まとめ
空中でコマンドが左右反転する。
この問題への対策について説明するのは今回で3回目になりますが、
それだけ問題が発生しやすいということかもしれません。

例えば、空中ダッシュ含め 空中で発動するタイプの技が多いゲームだと
キャラ同士の飛び越えも頻繁に発生するため問題に直面しやすいと思います。
スクリプトに加える処理は少々複雑ですが
きっちり対策を用意して操作にストレスの無いゲームを実現してください。

以上、長くなりましたが壁際、空中でコマンドが左右反転する問題に関する説明を終えます。
なお、今回説明した内容について気になる点や疑問点などがあれば
掲示板 にて質問を受け付けておりますので気軽にお尋ねください。


ページ先頭へもどる

トップページへもどる

inserted by FC2 system