001 はじめに
002 ゲーム作成
003 各種メニュー確認
004 「キャラクター」作成
005 「ステージ」作成
006 「デモ」作成
007 「テストプレー」
008 「ステージ」編集
009 「キャラクター」編集
010 パレット管理
011 アニメーション
012 「座標移動」
013 重力の設定
014 その他スクリプト
015 「リアクション」
016 ヒットエフェクト
017 スクリプトの並べ方
018 攻撃動作
019 「コマンド入力」
020 攻撃判定
021 やられ判定
022 やられ動作の設定
023 「タイトル画面」作成
024 タイトルカーソルの表示
025 「キャラクターセレクト」
026 各種インターフェイス
027 ラウンド関連の表示
028 CPUの動作指定
029 「ストーリー」の作成
030 ヒット数の表示
031 投げ技の作成
032 ゲージ消費技の作成
033 ステージの組み方
034 デモシーンの組み方
035 格闘ツクールの仕様
■ コマンド解説
001 画像呼出
002 座標移動
003 防御枠
004 攻撃枠
005 リアクション
006 サウンド
007 キャンセル条件
008 色変更
009 オブジェクト発生
010 変数による分岐
011 条件分岐:技中有効
012 条件分岐:基本分岐
013 条件分岐:ランダム分岐
014 条件分岐:コマンド入力
015 スクリプト移動: 移動
016 スクリプト移動: 呼出
017 スクリプト移動: ループ
018 座標・画像変更
019 スクリプト変更
020 スペシャルゲージチェック分岐
021 ライフゲージチェック分岐
022 ゲージ変更
023 パレットアニメ・揺らし
024 停止
025 残像
026 終了
■ テクニック解説
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 ハイジャンプの作成
■ バグ・よくあるミス
Q_A よくあるミスQ&A
001 消せない画像
002 リスト選択とキーボード操作
003 アニメプレビューで落ちる
004 起動直後に落ちる
005 OBJ発生位置がずれる
006 着地すると技終了
007 画面端でのヒットバック1
008 グラデーションが汚い
009 画面端でのヒットバック2
010 境界のアンチエイリアス問題
011 ガードされてもキャンセル可能
012 プレーヤーの読込に失敗
013 謎の残像が発生する
014 コマンドが左右反転する
015 パレット管理でよくあるミス
016 下溜め技が失敗する
017 パレットウィンドウで落ちる
018 コンボが途切れない
019 やられ中にしゃがみ可能
020 ソフトのバージョン表記
021 空中でコマンド左右反転2
022 左右押しでガード前進
023 真空投げが発生する
024 空中でコマンド左右反転3
■ テスト時のチェック項目
■ 解説用データ ダウンロード
024
コマンドが左右反転する3
相手を飛び越えた際、空中でコマンドの入力が左右反転する。
この問題についてはこれまでに何度か説明してきました。
→ コマンドが左右反転する
→ コマンドが左右反転する2
「コマンドが左右反転する2」のページでは
1P側/2P側のX座標を比較して相手を飛び越えているかどうかを判定、
その対策を説明していましたが、この対策には1つ盲点があり
画面端で相手を飛び越えた場合、コマンドの左右反転が起きてしまいます。
そこで、このページでは左右反転が発生する条件とその対策について
補足的に説明したいと思います。
今回は「コマンドが左右反転する2」で行った対策の改良案となります。
あらかじめ処理の仕組みを理解していることが前提となりますので十分に注意して読み進めてください。
逆に言えば、対策の処理が完成していれば改良はそれほど難しくありません。
仕組みの説明抜きで修正手順だけ知りたい方は こちら からどうぞ。
現状の確認
上で説明した問題ですが、コマンド反転が起きるのは以下のような状況にいる場合です。
相手キャラが壁際にいて、自キャラが画面中央側から相手を飛び越えるようにジャンプした
ここからは実際のゲーム画面と合わせて問題の発生条件を詳しく説明します。
------------------------------------------------------------
ゲーム開始。
画面左側中央)に自キャラが立っています。
一方、相手キャラは画面右端に立っています。
これはステージの右端であり、これ以上右にスクロールすることは有りません。
自キャラが相手キャラに近付いて、前方ジャンプを出します。
ここで、自キャラは空中で出せる技を2つ持っています。
前方向キー2回入力で、空中前ダッシュ
後方向キー2回入力で、空中バックステップ
といった具合です。
自キャラが画面右端に触れました。
この時、相手キャラに注目すると一瞬「振りむき:立ち」が発生していることがわかります。
画面端にも関わらず、飛び越えが発生しているという状況です。
ここで自キャラは前方向キーを2回入力、「空中前ダッシュ」を出そうとします。
しかし、相手を飛び越えているためにコマンドは左右反転してしまい
後方向キー2回入力である「空中バックステップ」が出てしまいます。
ここで画面上にある「B=C」という表示に注目してください。
詳しくは後述しますが、これは自キャラと相手キャラのX座標が同じ値であることを示しています。
MEMO
画面端での「めくり」
ゲームによってルールは様々ですが、
画面端にいる相手を飛び越えられるかどうかは
ゲームの駆け引きに大きな影響を与えます。
飛び越えられないルールの場合、
画面端にいる相手に対して「めくり」というテクニックは通用しなくなります。
格闘ツクールを使ってこういったタイプのゲームを作成する場合
別途、画面端での飛び越えを防ぐ処理を組むことになります。
( 画面端にいる時はキャラ上方に飛び越え防止用のぶつかり判定を出す、など )
一方、画面端でも相手を飛び越えられるルールの場合は
画面端にいる相手に対しても「めくり」のテクニックが使えます。
ただし、このルールを格闘ツクールで表現するためには
画面端でも飛び越えによるコマンド反転対策を用意する必要があります。
原因
コマンドが左右反転する2のページでは
自キャラのX座標と相手キャラのX座標を比較、
その大小を基準にして飛び越えの成立を判定していました。
ただし、この判定には1つ盲点があります。
それは自キャラの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回目になりますが、
それだけ問題が発生しやすいということかもしれません。
例えば、空中ダッシュ含め 空中で発動するタイプの技が多いゲームだと
キャラ同士の飛び越えも頻繁に発生するため問題に直面しやすいと思います。
スクリプトに加える処理は少々複雑ですが
きっちり対策を用意して操作にストレスの無いゲームを実現してください。
以上、長くなりましたが壁際、空中でコマンドが左右反転する問題に関する説明を終えます。
なお、今回説明した内容について気になる点や疑問点などがあれば
掲示板 にて質問を受け付けておりますので気軽にお尋ねください。