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
■ テスト時のチェック項目
■ 解説用データ ダウンロード
053
OBJの動きを停止させる
2D格闘ツクールには、停止:プレーヤーストップという命令があります。
この命令を使うと自キャラや相手キャラの動きを止めることができるので
超必殺技の演出などでゲームを一時停止させたい時に便利です。
ただ、この命令には1つ弱点があります。
キャラは止めることができても、飛び道具などオブジェクト(OBJ)は止めることができないのです。
このページでは、飛び道具を含めてゲーム内で動きを停止させる方法について説明したいと思います。
なお、ここで対象とするのは等速で移動するOBJのみです。
重力によって加速度が変化するようなOBJについては対象としていないので注意してください。
現状の確認
OBJを停止できないという問題が一番大きく出るのが飛び道具だと思います。
ここでは、以下のような条件で問題点を確認します。
・自キャラは飛び道具攻撃を持っている
・自キャラは停止演出付きの超必殺技を持っている
ゲーム開始、左側にいる自キャラが飛び道具を発射します。
右側にいる相手キャラはまだ ガード( 後入力 ) していません。
飛び道具の移動速度や距離を考えると、まだガード入力しなくて大丈夫な位置関係です。
少し時間が経過して飛び道具が近づいてきました。
相手キャラはそろそろガード入力しようとしますが…
ここで自キャラが超必殺技を出します。
超必殺技の停止演出によって自キャラ・相手キャラともに動作を停止します。
しかし、自キャラが先に出しておいた飛び道具は
停止演出の影響を受けることなく移動を続けていき…
相手キャラに飛び道具OBJがヒットしました。
説明をわかりやすくするために少し長めの停止演出を入れていますが、
技を使うタイミングによっては実際のゲーム上でもこういう場面が有り得ます。
超必殺技の重みを魅せるための演出でしかない停止が
時を止めて動けない相手に時間差で攻撃を当てる、
という実用的な効果として利用できてしまうのはゲームバランス的にまずいです。
処理の考え方
先に述べた通り、停止命令ではOBJを止めることができません。
飛び道具を止めるには、飛び道具のスクリプト内で停止の処理を組む必要があります。
ここで飛び道具のスクリプトを見てみましょう。
単純化したスクリプトですが、流れとしては下記のようなものになります。
※ここでは飛び道具がヒットしたら消滅〜などの処理を省略しています。
移動速度を与え、アニメーションを表示する という処理を繰り返して移動していく。
移動力指定も含めたループ処理になっている点に注目してください。
これと似たような処理で移動力が0のバージョンを用意、
変数で移動力有りバージョンと無しバージョンに分岐させれば
擬似的にOBJを停止させることができそうです。
変数分岐込みのループ処理を組むのがポイントとなるでしょう。
スクリプトの編集
まずは今回の処理で使用する変数を選びます。
敵味方に作用する停止処理なので、ここはシステム変数を使うのが妥当でしょう。
例では システム変数N を使用します。
------------------------------------------------------------
飛び道具OBJ
飛び道具OBJに先述した処理を追加しましょう。
以下は処理元となるスクリプトです。
簡単なループ処理になっています。
この行をコピーして、そのまま同じ行にペーストしてください。
こうしておくとスクリプト作成の手間が省けます。
※ただし、コピー後のスクリプトはスクリプト移動など飛び先の設定が
ずれたりするので再確認するのを忘れないようにしてください。
変更後のスクリプトは以下のようになります。
番号 | 命令 | 設定内容 |
1 | 数値計算無し システム変数N = 1 なら、7 へ | |
2 | 移動X = +3.30代入 | |
3 | 飛び道具攻撃用のリアクション設定 | |
4 | 飛び道具攻撃の攻撃判定 | |
5 | WAIT = 5 | |
6 | 1 へ | |
7 | 移動力を全て0にリセット | |
8 | 飛び道具攻撃用のリアクション設定 | |
9 | 飛び道具攻撃の攻撃判定 | |
10 | WAIT = 5 | |
11 | 1 へ |
なお、ループの間隔が短い方がOBJ停止/再開の反応は良くなります。
また、アニメ枚数が多いOBJの場合は停止の処理が少々手間になるかもしれません。
------------------------------------------------------------
停止用OBJ
次に、超必殺技のスクリプトにシステム変数を
コントロールする処理を追加したいところですが
ここではOBJを発生させて、その中でシステム変数の処理を行います。
キャラ本体でも問題は無いのですが、これだと着地や攻撃のヒットなど
何かの拍子に超必殺技の動作がキャンセルされてしまう可能性があります。
そこで、念のため独立したOBJを発生させてその中で変数処理を行うわけです。
当然OBJは停止命令の影響を受けないので、指定したタイミングで変数のリセットが行えます。
※停止処理の長さ・タイミングは本体である超必殺技の動作に合わせます。
つまり、1つの技動作専用に合わせた停止命令ということです。
停止時間が異なる技についてはまた別の停止用OBJを用意してください。
以下は実際のスクリプトです。
番号 | 命令 | 設定内容 |
1 | システム変数N に 1 を代入 | |
2 | WAIT = 50 | |
3 | システム変数N に 0 を代入 | |
4 | WAIT = 5 | |
5 | 終了 |
ここでは超必殺技の演出で WAIT = 50 の停止を行うので、
今回のスクリプトでも変数処理の間に WAIT = 50 の画像を表示しています。
内容としては透明画像でOKです。
必要であれば上記画像( リンク先のBMP を使用してください。
( 慣れないうちは何かわかりやすい画像をセットしてキャラ本体の停止とのタイミング合わせをすると良いかもしれません )
また、スクリプト終端にも同じ画像命令を置いています。
これは2番目の変数分岐命令を動かすための処理になります。
( 変数分岐命令は後に画像命令が無いと動作しない、というルールが有ります )
------------------------------------------------------------
超必殺技のスクリプト
最後に、キャラ本体の超必殺技スクリプトに上記処理を呼び出すオブジェクト発生命令を追加します。
以下は変更前のスクリプトになります。
赤色で表示したブロックに注目してください。
キャラクターの停止命令とその直後の画像命令です。
停止用OBJは、この手前で発生させると良いです。
詳しいスクリプト内容については省略しますが、OBJ発生のタイミングだけチェックしておいてください。
以上でOBJ停止用の処理は完成です。
テストプレーで処理を確認
再びテストプレーを実行してOBJを含めた停止演出が出来るか確認しましょう。
ゲーム開始、自キャラが飛び道具を放ちます。
続けて自キャラが超必殺技を発動、両者のキャラが停止して…
今度は飛び道具もキャラ同様に停止しています。
停止演出が済むと自キャラと飛び道具OBJが同時に動きを再開します。
(ここでズレが目立つ場合は停止時間の長さを調整して合わせてください)
上手く動作することが確認できたら、他の技やキャラにも同様の処理を追加しておきましょう。
格闘ツクールの停止命令は手軽に使えて便利ですが、
完全な停止演出を表現するには今回のような工夫を各所に施す必要があります。
多少手間がかかりますが、しっかりした停止演出はやはり重みがあります。
( 特に停止時間が長い演出の場合、全体停止の効果が見えやすいです )
今回はキャラ全般を対象とした停止演出でしたが、
同様にしてステージのアニメーションを停止させるのも良いでしょう。
以上、長くなりましたがOBJの動きを停止させる方法についての説明を終えます。
なお、今回説明した内容について気になる点や疑問点などがあれば
掲示板 にて質問を受け付けておりますので気軽にお尋ねください。