[掲示板へもどる]
一括表示

記事No: 21534 [関連記事]
タイトルSTGゲーム続き 敵弾発射時にマップ移動した際の弾ピクチャの消し方
投稿日: 2023/05/25 20:13
投稿者影月 [riFrFOrO579(海外)]

STGゲーム続き 敵弾発射時にマップ移動した際の弾ピクチャの消し方 (画像サイズ: 363×369 13kB)

今STGを作っているのですがマップ移動時にピクチャで表示させている敵の弾がうまく消えてくれません。
マップの出入りに変数をつけてその変数が1のときに該当ピクチャを消去する指示を入れることによって一応弾は消えてくれるのですがそうすると今度は前のマップに戻ったときなぜか消えたはずの弾が表示されたままになってしまうというバグが起こってしまいます。

ゲーム内容としてはステルスゲームで主人公が敵視界に入ると敵が弾を撃ってくるという仕掛けです。

視界の表現にはウディタ公式サイトにある8方向視界コモン(UDB版)を使い、敵の弾発射にはDot蜥蜴の掘っ立て小屋というサイトにある自機狙い弾の作り方というページに貼ってあった敵の弾発射コモンを使わせてもらっています。

まとめるとこんな感じです。
・主人公が敵の視界に入る
・すると8方向視界コモンがUDB経由で敵用のイベントのセルフ変数0に1を代入する
・敵用イベントセルフ変数0=1で敵の弾発射コモン呼び出し
・この状況で敵が弾を撃った瞬間に別マップに移動すると弾が残ってしまう※
・あるいは弾を消えるよう設定しても前マップに戻ると弾が表示されてしまう※
※この際弾は動かず画面の一点に固定されたまま

敵の弾発射コモン
▼ 敵と主人公の座標を取得
■変数操作+: CSelf15[敵キャラX座標] = このマップイベント の 画面X座標
■変数操作+: CSelf16[敵キャラY座標] = このマップイベント の 画面Y座標
■変数操作+: CSelf17[主人公X座標] = 主人公 の 画面X座標
■変数操作+: CSelf18[主人公Y座標] = 主人公 の 画面Y座標
▼ X、Yそれぞれの座標の差を求めます
■変数操作: CSelf25[X座標の差] = CSelf17[主人公X座標] - CSelf15[敵キャラX座標]
■変数操作: CSelf26[Y座標の差] = CSelf18[主人公Y座標] - CSelf16[敵キャラY座標]
▼ X、Yの座標の差を代入して角度を求めます
■変数操作: CSelf27[弾発射角度] = 角度[x10]←傾き X: CSelf25[X座標の差] Y: CSelf26[Y座標の差]
▼ cosと角度でX方向の移動量を求めます
■変数操作: CSelf28[cos] = cos[x1000]←角度[x10] = CSelf27[弾発射角度] + 0
▼ sinと角度でY方向の移動量を求めます
■変数操作: CSelf29[sin] = sin[x1000]←角度[x10] = CSelf27[弾発射角度] + 0
▼ 移動量が大きすぎるので除算して小さくします。
▼ 大きな値で割るほどスピードが遅くなります。
■変数操作: CSelf29[sin] /= 160 + 0
■変数操作: CSelf28[cos] /= 160 + 0
▼ 敵の座標に弾を表示、グラフィックは各自用意してください。
■ピクチャ表示:300 [中心]ファイル「BasicData/icon010.png」 X:CSelf15[敵キャラX座標] Y:CSelf16[敵キャラY座標] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 65% / カラー R[100] G[100] B[100]
■デバッグ文:ピクチャ表示:300
▼ 回数が多いほど、弾の飛距離が伸びます。
■回数付きループ [ 30 ]回
|▼ 弾の移動を行います。相対にチェック入れるのを忘れないでください。
|■ピクチャ移動:300 相対X:CSelf28[cos] Y:CSelf29[sin] / 1(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 65% / カラー R[100] G[100] B[100]
|■ウェイト:1 フレーム
|■変数操作+: CSelf12[ピクチャのX座標] = ピクチャ:300 の X座標
|■変数操作+: CSelf13[ピクチャのY座標] = ピクチャ:300 の Y座標
|■変数操作: CSelf13[ピクチャのY座標] -= 5 + 0
|■変数操作: CSelf19 絶対値= CSelf12[ピクチャのX座標] - CSelf17[主人公X座標]
|■変数操作: CSelf20 絶対値= CSelf13[ピクチャのY座標] - CSelf18[主人公Y座標]
|■条件分岐(変数): 【1】 CSelf19 が 5 以下
|-◇分岐: 【1】 [ CSelf19 が 5 以下 ]の場合↓
| |■条件分岐(変数): 【1】 CSelf20 が 10 以下
| |-◇分岐: 【1】 [ CSelf20 が 10 以下 ]の場合↓
| | |■キャラエフェクト:主人公[点滅A(明滅)] R255/G0/B0 (2)フレーム
| | |■動作指定:主人公 / ジャンプ-右0下0
| | |■イベントの挿入[名]: ["○回復・ダメージ処理"] <コモンEv 4> / 1:HPの回復・減少 / 1:ファイターさん / -1
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■イベントの挿入[名]: ["マップ移動時敵弾消去"] <コモンEv 229>
|■イベントの挿入[名]: ["敵弾壁判定"] <コモンEv 218>
|■
◇ループここまで◇◇
▼ 弾を消します。
■ピクチャ消去:300 / 0(0)フレーム
■キャラエフェクト:主人公[点滅A(明滅)] R0/G0/B0 (0)フレーム


やりたいこととしては敵の弾発射時に主人公が別マップ移動した際
弾を消す(消すだけなら現状でもできる)

移動先マップから移動元マップに戻った際表示されてしまう敵弾を消したいです。


添付ファイルは移動先から移動元に帰ってきたときのバグの参考例です。
マップが切り替わった直後一瞬敵設定のマップイベントから弾が表示されそのあとは画像のように一点に固まっしまいます

敵イベント設定
ページ1何もなし(UDBで設定した8方向視界コモン作動中 ここで主人公が視界に入るとセルフ変数0に1〜9の方向が代入される)
ページ2並列実行セルフ変数0が1以上のとき 敵の弾発射コモン


記事No: 21536 [関連記事]
タイトルRe: STGゲーム続き 敵弾発射時にマップ移動した際の弾ピクチャの消し方
投稿日: 2023/05/25 21:52
投稿者YADO [LerLWW459(海外)]

ピクチャが残る原因は、ループの処理途中に別のマップへ移動すると、
マップイベントの並列実行が強制終了し、最後にあるピクチャ消去が実行できなくなる事が原因でしょう。

ピクチャの消し方はいくつかの方法がありますが、単純なのはコモンイベントにマップ移動を監視する並列実行を設定し、
別のマップへ移動したらピクチャが消えるようにする方法です。

コモンべイベント/並列実行
■変数操作+: CSelf10 = 現在のマップID
■条件分岐(変数): 【1】 CSelf10 が CSelf11 と同じ
-◇分岐: 【1】 [ CSelf10 が CSelf11 と同じ ]の場合↓
|■イベント処理中断
|■
◇分岐終了◇
■変数操作+: CSelf11 = 現在のマップID
■ピクチャ消去:300 / 0(0)フレーム

WoditorEvCOMMAND_START
[124][3,0]<0>(1600010,12288,0)()
[111][4,0]<0>(1,1600010,1600011,2)()
[401][1,0]<0>(1)()
[172][0,0]<1>()()
[0][0,0]<1>()()
[499][0,0]<0>()()
[124][3,0]<0>(1600011,12288,0)()
[150][3,0]<0>(2,300,0)()
WoditorEvCOMMAND_END


元のマップへ戻ってきた時にピクチャが表示されるのは、2ページ目が再び実行されている事が原因でしょう。

多分2ページのイベントコマンドを
■イベントの挿入[名]: ["敵の弾発射コモン"] <コモンEv 215>
■変数操作: このEvのセルフ変数0 = 0 + 0

のように設定しているかと思いますが、この場合は上記のピクチャが消えない理由と同様に、
別のマップへ移動するとイベント処理が強制終了してしまうため、
最後に設定した変数操作が実行できず、このマップへ戻ってくると再び2ページ目が最初から実行されます。

例えば以下のように設定すれば、2ページ目の1回目の実行は敵の弾発射コモンの呼び出しが実行され、
2回目の実行ではセルフ変数を「0」に戻して、2ページ目の起動条件を満たさないようにする事ができるでしょう。

■条件分岐(変数): 【1】 このEvのセルフ変数1 が 1 と同じ
-◇分岐: 【1】 [ このEvのセルフ変数1 が 1 と同じ ]の場合↓
|■変数操作: このEvのセルフ変数0〜このEvのセルフ変数1 = 0 + 0
|■イベント処理中断
|■
◇分岐終了◇
■変数操作: このEvのセルフ変数1 = 1 + 0
■イベントの挿入[名]: ["敵の弾発射コモン"] <コモンEv 215>


記事No: 21537 [関連記事]
タイトルRe: STGゲーム続き 敵弾発射時にマップ移動した際の弾ピクチャの消し方
投稿日: 2023/05/26 21:09
投稿者影月 [riFrFOrO579(海外)]

また助けられましたね
おかげさまでうまくいきました!

ありがとうございます!!