1 と 1.5. 並列イベントは Z と X を読み続けていますが、そのハンドラー内で S アタックが実行されているため、それらが衝突して同時に開始されるのを防げません。シールド、S トリガー、そして Form 4、6、8 の基本処理を、両方のスイッチのチェックでラップすることをお勧めします。これにより、他の処理が実行されている間にこれらが開始されるのを防げます:
◆If: MOVEMENT ATTACK is OFF
◆If: ATTACKING is OFF
(シールドは変更なし)
◆End
◆End
他の処理についても同様に、2つのチェックをそれぞれ囲むようにします。これには、S アタックの最終行で MOVEMENT ATTACK を OFF にする必要があるため、待機中の処理がすべて完了するまで Form 2 のフリーズが保持されます。通常のパUNCH には、10番で独自のバージョンを用意し、連打可能にします。
2 と 3. これらが同一のものではないかと疑問に思っています。敵のページは上から下へ実行されるため、攻撃ロジック内で敵が Wait 処理の途中にある状態でヒットが発生すると、下部にあるヒットチェックはその処理が完了するまで実行されず、ノックバックが遅れて発生します。これが一貫性がない理由で、各敵が何をしているかによって結果が変わるためです。攻撃ロジックのページ上部に、Wait コマンドや「このイベント」の移動ルートの設定(「待機」にチェックあり)はありますか?その部分のスクリーンショットをいただければ助かります。それがページの中でまだ見ていない唯一の箇所です。
ブロックのアイデアについてですが、ノックバックのルートには「移動できない場合はスキップ」がオンになっているため、他の敵が邪魔をすると、待たずに途中で停止します。2番については、敵側の Form 4 の分岐に、パUNCH と同様にスナップライン2つと「イベントの場所設定」がルートの上部にあるか確認してください。それらがなければ、ステップの途中でヒットすると、そのステップが完了するまで待機し、スナップが導入される前のパUNCH と同じポーズになります。
ATTACKING が ON になり、チャージアップ前に衝突判定が配置されると、ホップや後退のアニメーション中はライブ(有効)ですが不可視になるため、そのタイルにいる敵は爆発が表示される前にヒットを受けてしまいます。両者を爆発ルートの直下に移動し、衝突判定がチャージアップ中に追従するようにします:
◆Control Variables: #0197 ATTACK TYPE = 5
(移動パワーの行は変更なし)
(チャージアップは変更なし)
◆Control Variables: AtkX = プレイヤーのマップ X
◆Control Variables: AtkY = プレイヤーのマップ Y
◆Control Variables: AtkDir = プレイヤーの方向
(4つの AtkDir 分岐は変更なし)
◆Control Switches: #0181 ATTACKING = ON
◆Set Movement Route: 攻撃衝突判定 (スキップ, 待機)
(爆発ルートは変更なし)
◆Control Switches: #0181 ATTACKING = OFF
◆Control Switches: #0182 MOVEMENT ATTACK = OFF
チャージアップが RecoilGo の ON である場合、並列イベントはそれ自体では待機しないため、ホップや後退にかかる時間の分だけ Wait を直後に追加します。すでにこの順序になっている場合は、Form 1 の S ブロックのスクリーンショットをいただければ助かります。
-
彷徨っているイベントには「すり抜け」がまだオンになっていますか?「すり抜け」がオフのイベントは、優先度に関係なく他のすべてのイベントにブロックされます。優先度はプレイヤーとの衝突の有無だけを変更します。そのため「ランダム移動」はブロックされていない方向を選び続け、それを避けているように見えます。また、それは実際の「攻撃衝突判定」が彷徨っているのか、スポナーからのコピーですか?敵は実際のものしかチェックしないため、コピーであれば何もヒットしません。
-
敵は ATTACKING が OFF のときのみ再武装し、トラップはダウンしている間ずっとそれを ON に保持するため、各敵は1回しかヒットを受けません。私が提案するのは、ヒットに番号を振ることです。「ヒットカウント」変数は攻撃が再度ヒットしようとするたびに増え、各敵は SV: Last Hit に最後にヒットされた番号を記憶します。ATTACKING が OFF になると、以前のようにすべての処理が再武装するため、すでに動作している攻撃は変更されません。
トラップについては、新しいブロックを上部に配置し、敵がトラップのタイルから外れたら再武装するようにします。これにより、再びタイルに乗るとヒットします。トラップには独自の ATTACK TYPE 番号が必要なので、他の攻撃と共用している場合は新しい番号を与え、その攻撃の分岐をコピーしてください。
以下は「ヒットカウント」を組み込んだ全体のヒットセクションで、11番のノックバック変更も含まれています。SV: Last Hit は新しい自己変数、Hit Count は通常の変数、Self Switch B は使用されなくなったため、そのラベルは再び利用可能です。括弧内は変更なし:
◆If: ATTACKING is ON
◆If: ATTACK TYPE = (トラップのタイプ)
◆Control Variables: #0192 SV: AtkCol X = 攻撃衝突判定のマップ X
◆Control Variables: #0193 SV: AtkCol Y = 攻撃衝突判定のマップ Y
◆Control Variables: #0194 SV: My X = このイベントのマップ X
◆Control Variables: #0195 SV: My Y = このイベントのマップ Y
◆If: SV: AtkCol X ≠ SV: My X
◆Control Variables: #0XXX SV: Last Hit = -1
◆End
◆If: SV: AtkCol Y ≠ SV: My Y
◆Control Variables: #0XXX SV: Last Hit = -1
◆End
◆End
◆If: SV: Last Hit ≠ Hit Count
◆Control Variables: #0192 SV: AtkCol X = 攻撃衝突判定のマップ X
◆Control Variables: #0193 SV: AtkCol Y = 攻撃衝突判定のマップ Y
(ATTACK TYPE = 2 の位置ブロックは変更なし)
◆Control Variables: #0194 SV: My X = このイベントのマップ X
◆Control Variables: #0195 SV: My Y = このイベントのマップ Y
(5つのダメージ行は変更なし)
◆If: ATTACK TYPE = 4
◆Control Variables: #0189 SV: This event HP -= SV: Damage
◆Play SE: Blow1 (90, 150, 0)
◆Set Movement Route: このイベント
: Blend Mode: Additive
: Wait: 30 frames
: Blend Mode: Normal
◆Control Variables: #0XXX SV: Last Hit = Hit Count
◆End
◆If: SV: AtkCol X = SV: My X
◆If: SV: AtkCol Y = SV: My Y
◆If: ATTACK TYPE = 0
◆Common Event: DAMAGE SFX
◆Common Event: SCREENSHAKE SMALL
◆Control Variables: #0189 SV: This event HP -= SV: Damage
◆Control Variables: #0194 SV: My X = Math.round(this.character(0)._realX)
◆Control Variables: #0195 SV: My Y = Math.round(this.character(0)._realY)
◆Set Event Location: このイベント, ({SV: My X},{SV: My Y})
◆Script: this.character(0).setDirection(10 - $gameMap.event(XX).direction());
◆Set Movement Route: このイベント (スキップ, 待機)
: Speed: 6
: 1 Step Backward
: 1 Step Backward
: Speed: 4
◆End
◆If: ATTACK TYPE = 1
◆Control Variables: #0194 SV: My X = Math.round(this.character(0)._realX)
◆Control Variables: #0195 SV: My Y = Math.round(this.character(0)._realY)
◆Set Event Location: このイベント, ({SV: My X},{SV: My Y})
◆Script: this.character(0).setDirection(10 - $gameMap.event(XX).direction());
◆Set Movement Route: このイベント (スキップ, 待機)
: Blend Mode: Normal
: Speed: 5
: SE: Blow5 (80, 100, 0)
: 1 Step Backward
: Speed: 4
: Wait: 5 frames
: Blend Mode: Normal
◆End
(ATTACK TYPE = 2 の分岐は変更なし)
(ATTACK TYPE = 3 の分岐は変更なし)
(ATTACK TYPE = 5 の分岐は変更なし)
(トラップの分岐は変更なし)
◆If: ATTACK TYPE ≠ 1
◆If: ATTACK TYPE ≠ 3
◆Control Variables: #0XXX SV: Last Hit = Hit Count
◆End
◆End
◆End
◆End
◆End
: Else
◆Control Variables: #0XXX SV: Last Hit = -1
◆End
- いいえ、「ヒットカウント」を導入すれば、トリプル爆発には爆発の間に1行追加するだけです:
(爆発1は変更なし)
◆Control Variables: #0XXX Hit Count += 1
(爆発2は変更なし)
◆Control Variables: #0XXX Hit Count += 1
(爆発3は変更なし)
その間に ATTACKING をオフにすると敵が再武装しますが、衝突判定の追従ロジックがそのフレームでそれを取得します。
-
Form 8 の基本処理は、1番と同じ2つのチェックの中に配置するため、実行中に2回押ししても無視されます。それでも固まる場合は、内部に「待機」にチェックがついたプレイヤーの移動ルート設定があるか疑問に思っています。TurnInPlace は、並列イベントからのプレイヤーのルートを、矢印が押されている間だけ動かすことができますが、これは押したときにクリアされることと一致します。そのルートが一時的なポーズのためだけに存在する場合は、プレーンな Wait コマンドで同じ役割を果たすことができ、プレイヤーに影響を与えません。
-
敵が固まったとき、背後に壁や他の敵などの障害物がありますか?「跳ね返り」には「移動できない場合はスキップ」がオンになっているため、スペースがないとシールドのタイル上に留まり、シールドが毎パス再チェックするため、その場で跳ね返り続けます。背後にスペースがない場合にどうなってほしいですか?ダメージを受ける、横にスライドする、それともシールドが下がるまでその場に固定される?
-
パUNCH のルートには「待機」がオンになっているため、並列イベントはスイングが完了するまでそこで待機し、次の入力を認識しません。「待機」を外し、ATTACKING OFF をアクションタイマーと同じ形状のタイマーに渡すことで、解放されます。各入力ごとにヒットカウントも増やすため、すべてのスイングがヒットします。これは他のタイマーと一緒に並列イベントの上部に配置します:
◆If: Punch Timer > 0
◆Control Variables: #0XXX Punch Timer -= 1
◆If: Punch Timer = 0
◆Control Switches: #0181 ATTACKING = OFF
◆End
◆End
そしてパUNCH は、現在配置されているフォームチェックの中に入れます:
◆If: MOVEMENT ATTACK is OFF
◆If: Script: Input.isTriggered("ok") && (!$gameSwitches.value(181) || $gameVariables.value(XXX) > 0)
◆Control Switches: #0181 ATTACKING = ON
◆Control Variables: #0197 ATTACK TYPE = 0
(移動パワーの行は変更なし)
◆Control Variables: #0XXX Hit Count += 1
◆Play SE: Blow1
◆Control Variables: AtkX = プレイヤーのマップ X
◆Control Variables: AtkY = プレイヤーのマップ Y
◆Control Variables: AtkDir = プレイヤーの方向
◆If: AtkDir = 2
◆Set Event Location: 攻撃衝突判定, ({AtkX},{AtkY}), Down
◆End
◆If: AtkDir = 4
◆Set Event Location: 攻撃衝突判定, ({AtkX},{AtkY}), Left
◆End
◆If: AtkDir = 6
◆Set Event Location: 攻撃衝突判定, ({AtkX},{AtkY}), Right
◆End
◆If: AtkDir = 8
◆Set Event Location: 攻撃衝突判定, ({AtkX},{AtkY}), Up
◆End
◆Set Movement Route: 攻撃衝突判定 (スキップ)
(パUNCH ルートは変更なし)
◆Control Variables: #0XXX Punch Timer = 15
◆End
◆End
Script は Z が押されたことを読み取り、何も実行中ではないか、実行中なのはパUNCH のみです。其中的 XXX は Punch Timer の変数 ID です。15 はパUNCH ルートにかかる時間の推測値です。ルートより少し長くする必要があります。そうしないと、Transparent ON が ATTACKING が OFF になる前に実行されず、衝突判定がパUNCH 後に可視のままになる可能性があります。もし現在、パUNCH の後に別ルートで Transparent ON が設定されている場合は、このルートの最後に移動してください。
- 跳ね返り内の「プレイヤーに向ける」が原因だと思います。敵があなたより上または下が左右よりも遠い場合、上下のどちらかを選択するため、左右のスイングの場合、衝突判定の横に歩いた敵が上下に押しやられることがあります。6番のヒットセクションでは、パUNCH とシールドの分岐で、Script ラインに置き換え、敵をヒットした方向に合わせて反転させ、ステップバックが衝突判定の移動方向に沿って行われるようにしています。10 から方向を引くと反対方向になり、XX は攻撃衝突判定のイベント ID です。