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

記事No: 21529 [関連記事]
タイトルSTGゲームにおける自機発射弾ピクチャの消し方
投稿日: 2023/05/21 13:09
投稿者影月 [riFrFOrO579(海外)]

STGゲームにおける自機発射弾ピクチャの消し方 (画像サイズ: 1400×1400 294kB)

[やりたいこと]
STGゲームを作っています。
そこで主人公の撃った弾が敵に命中したら弾が消えるという処理を
実装したいのですができません。

[やってみたこと]
ネットでみたウディタ解説やSTG作成動画を参考に自機弾発射とそれにたいする当たり判定を作成しました。
解説を参考にピクチャ表示の弾をループ中断からのピクチャ消去という風に
コモンを組んでみたのですがピクチャが消えてくれません。
当たり判定それ自体は正常に機能しているようで弾が当たった際敵はきちんと指定した通りの反応を見せています。
ピクチャ番号の指定などは再三確認しているので番号指定の問題ではないはずです。

コモンの内容は添付画像を見てもらいたいです。
御覧のように発射処理と当たり判定を別コモンにしてあります。
並列実行(常時)の発射処理に呼び出し時のみの当たり判定を呼び出す形です。

発射処理と当たり判定のコモンを一つにまとめたりそれぞれのコモンを双方ともに並列実行(常時)にするなどの工夫も行いましたがいずれも結果はかわりませんでした。

なお使用ウディタは3.184です。


記事No: 21530 [関連記事]
タイトルRe: STGゲームにおける自機発射弾ピクチャの消し方
投稿日: 2023/05/21 14:48
投稿者YADO [LerLWW459(海外)]

> [やりたいこと]
> STGゲームを作っています。
> そこで主人公の撃った弾が敵に命中したら弾が消えるという処理を
> 実装したいのですができません。
>
> [やってみたこと]
> ネットでみたウディタ解説やSTG作成動画を参考に自機弾発射とそれにたいする当たり判定を作成しました。
> 解説を参考にピクチャ表示の弾をループ中断からのピクチャ消去という風に
> コモンを組んでみたのですがピクチャが消えてくれません。
> 当たり判定それ自体は正常に機能しているようで弾が当たった際敵はきちんと指定した通りの反応を見せています。
> ピクチャ番号の指定などは再三確認しているので番号指定の問題ではないはずです。
>
> コモンの内容は添付画像を見てもらいたいです。
> 御覧のように発射処理と当たり判定を別コモンにしてあります。
> 並列実行(常時)の発射処理に呼び出し時のみの当たり判定を呼び出す形です。
>
> 発射処理と当たり判定のコモンを一つにまとめたりそれぞれのコモンを双方ともに並列実行(常時)にするなどの工夫も行いましたがいずれも結果はかわりませんでした。
>
> なお使用ウディタは3.184です。


ループの中にピクチャ表示があるので、これだとピクチャを消去してもすぐに再表示してしまうでしょう。
現状の設定では…
■回数付きループ [ 20 ]回
|■ピクチャ表示
|■ウェイト:1
と言った設定順ですが、これを…
■ピクチャ表示
■回数付きループ [ 20 ]回
|■ウェイト:1
と言ったように、ループ処理が始まる前にピクチャ表示を置けば、再表示は無くなるでしょう。


記事No: 21531 [関連記事]
タイトルRe: STGゲームにおける自機発射弾ピクチャの消し方
投稿日: 2023/05/22 13:12
投稿者影月 [riFrFOrO579(海外)]

指示通りやってみたら今度は弾が飛ばず主人公の上に一瞬表示された後すぐに消えてしまう点滅みたいになってしまいました。

どうもピクチャ表示は■回数付きループ [ 20 ]回をループ内に入れないとうまく飛んでくれないようです。

ピクチャの座標指示などに何か問題でもあるんでしょうか?


記事No: 21532 [関連記事]
タイトルRe: STGゲームにおける自機発射弾ピクチャの消し方
投稿日: 2023/05/22 22:42
投稿者YADO [LerLWW459(海外)]

最初の質問が「ピクチャが消えない」だったので、その原因だけを答えましたが、正常に動かす場合は、他にもいくつかの修正が必要です。

●添付されていた画像のピクチャ移動のXY設定が正しくなかった。
(主人公の向きのセルフ変数が設定されていた)

●ピクチャ表示で「スクロールとリンク」にチャックを付ける。
(既に設定されているかもしれない)

●ピクチャの処理時間は「0」。

●ピクチャを消去したら、移動処理(当たり判定の処理)を終了させる。
(消去したあとは表示位置が「X-1、Y-1」となり、画面左上にいる敵の当たり判定が実行してしまう)

●ピクチャ移動は「相対モード」で移動。
(通常のXYでも設定可能だが、「スクロールとリンク」を設定しているので、通常のXY位置にシステム変数[104・105]を加える必要があるため、相対モードの方が設定が楽で分かりやすい)

●当たり判定のコモンの最後にあるピクチャ消去は「ループ中断」の所へ移動。
(ピクチャ消去を最後の行に置いておくと、敵に当たっても当たらなくてもピクチャが消えてしまう)


上記を踏まえた上で設定し直すと、以下のようになります。

コモンイベント「弾丸発射処理」/並列実行
■キー入力:CSelf10[キー][入力待ち] キーボード(100〜) [キーコード[146]のみ判定] ( Cキー )
■変数操作: CSelf15[ピクチャ番号] = 301 + 0
■変数操作+: CSelf11[X] = 主人公 の 画面X座標
■変数操作+: CSelf12[Y] = 主人公 の 画面Y座標
■変数操作: CSelf12[Y] -= 8 + 0
■変数操作+: CSelf20[主人公の向き] = 主人公 の 向き(1〜9)
■ピクチャ表示:CSelf15[ピクチャ番号] [中心]文字列[●] X:CSelf11[X] Y:CSelf12[Y] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作: CSelf21[処理時間] = 20 + 0
■回数付きループ [ 20 ]回
|■条件分岐(変数): 【1】 CSelf20[主人公の向き] が 1 と同じ 【2】 CSelf20[主人公の向き] が 2 と同じ 【3】 CSelf20[主人公の向き] が 3 と同じ 【4】 CSelf20[主人公の向き] が 4 と同じ
|-◇分岐: 【1】 [ CSelf20[主人公の向き] が 1 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:-8 Y:8 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|-◇分岐: 【2】 [ CSelf20[主人公の向き] が 2 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:0 Y:8 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|-◇分岐: 【3】 [ CSelf20[主人公の向き] が 3 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:8 Y:8 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|-◇分岐: 【4】 [ CSelf20[主人公の向き] が 4 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:-8 Y:0 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|◇分岐終了◇
|■条件分岐(変数): 【1】 CSelf20[主人公の向き] が 6 と同じ 【2】 CSelf20[主人公の向き] が 7 と同じ 【3】 CSelf20[主人公の向き] が 8 と同じ 【4】 CSelf20[主人公の向き] が 9 と同じ
|-◇分岐: 【1】 [ CSelf20[主人公の向き] が 6 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:8 Y:0 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|-◇分岐: 【2】 [ CSelf20[主人公の向き] が 7 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:-8 Y:-8 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|-◇分岐: 【3】 [ CSelf20[主人公の向き] が 8 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:0 Y:-8 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|-◇分岐: 【4】 [ CSelf20[主人公の向き] が 9 と同じ ]の場合↓
||■ピクチャ移動:CSelf15[ピクチャ番号] 相対X:8 Y:-8 / 0(0)フレーム / パターン 同値 / 透 同値 / 表示形式:同値 / 角 同値 / 拡 同値 / カラー 同値
||■
|◇分岐終了◇
|■イベントの挿入[名]: ["当たり判定"] <コモンEv 216>
|■変数操作+: CSelf16[表示有無] = ピクチャ:CSelf15[ピクチャ番号] の ピクチャが使用中?(1=YES)
|■条件分岐(変数): 【1】 CSelf16[表示有無] が 0 と同じ
|-◇分岐: 【1】 [ CSelf16[表示有無] が 0 と同じ ]の場合↓
||■ループ中断
||■
|◇分岐終了◇
|■変数操作: CSelf21[処理時間] -= 1 + 0
|■ウェイト:1 フレーム
|■
◇ループここまで◇◇
■ピクチャ消去:CSelf15[ピクチャ番号] / 0(0)フレーム
■ウェイト:CSelf21[処理時間] フレーム

WoditorEvCOMMAND_START
[123][3,0]<0>(1600010,4480,146)()
[121][4,0]<0>(1600015,301,0,0)()
[124][4,0]<0>(1600011,4096,-2,6)()
[124][4,0]<0>(1600012,4096,-2,7)()
[121][4,0]<0>(1600012,8,0,512)()
[124][4,0]<0>(1600020,4096,-2,5)()
[150][11,1]<0>(33558560,1600015,0,1,1,1,255,1600011,1600012,100,0)("●")
[121][4,0]<0>(1600021,20,0,0)()
[179][1,0]<0>(20)()
[111][13,0]<1>(4,1600020,1,2,1600020,2,2,1600020,3,2,1600020,4,2)()
[401][1,0]<1>(1)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,-8,8,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[401][1,0]<1>(2)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,0,8,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[401][1,0]<1>(3)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,8,8,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[401][1,0]<1>(4)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,-8,0,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[499][0,0]<1>()()
[111][13,0]<1>(4,1600020,6,2,1600020,7,2,1600020,8,2,1600020,9,2)()
[401][1,0]<1>(1)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,8,0,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[401][1,0]<1>(2)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,-8,-8,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[401][1,0]<1>(3)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,0,-8,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[401][1,0]<1>(4)()
[150][13,0]<2>(4263681,1600015,0,0,0,-1000000,-1000000,8,-8,-1000000,-1000000,0,16777216)()
[0][0,0]<2>()()
[499][0,0]<1>()()
[300][2,1]<1>(0,0)("当たり判定")
[124][4,0]<1>(1600016,16384,1600015,9)()
[111][4,0]<1>(1,1600016,0,2)()
[401][1,0]<1>(1)()
[171][0,0]<2>()()
[0][0,0]<2>()()
[499][0,0]<1>()()
[121][4,0]<1>(1600021,1,0,512)()
[180][1,0]<1>(1)()
[0][0,0]<1>()()
[498][0,0]<0>()()
[150][3,0]<0>(2,1600015,0)()
[180][1,0]<0>(1600021)()
WoditorEvCOMMAND_END

コモンイベント「当たり判定」/呼び出しのみ
■変数操作: CSelf15[ピクチャ番号] = 301 + 0
■変数操作+: CSelf30[ピクチャX] = ピクチャ:CSelf15[ピクチャ番号] の X座標
■変数操作+: CSelf31[ピクチャY] = ピクチャ:CSelf15[ピクチャ番号] の Y座標



■変数操作: CSelf38[イベントID] = 0 + 0
■回数付きループ [ 10 ]回
|■変数操作: CSelf38[イベントID] += 1 + 0
|■変数操作+: CSelf37[影グラフィック番号] = キャラ[CSelf38[イベントID]] の 影グラフィック番号
|■条件分岐(変数): 【1】 CSelf37[影グラフィック番号] が 2 以外
|-◇分岐: 【1】 [ CSelf37[影グラフィック番号] が 2 以外 ]の場合↓
||■ループ開始へ戻る
||■
|◇分岐終了◇
|■変数操作+: CSelf32[イベントX] = キャラ[CSelf38[イベントID]] の 画面X座標
|■変数操作+: CSelf33[イベントY] = キャラ[CSelf38[イベントID]] の 画面Y座標
|■変数操作: CSelf33[イベントY] -= 5 + 0
|■変数操作: CSelf34[距離X] 絶対値= CSelf30[ピクチャX] - CSelf32[イベントX]
|■変数操作: CSelf35[距離Y] 絶対値= CSelf31[ピクチャY] - CSelf33[イベントY]
|■条件分岐(変数): 【1】 CSelf34[距離X] が 5 以下
|-◇分岐: 【1】 [ CSelf34[距離X] が 5 以下 ]の場合↓
||■条件分岐(変数): 【1】 CSelf35[距離Y] が 10 以下
||-◇分岐: 【1】 [ CSelf35[距離Y] が 10 以下 ]の場合↓
|||■キャラエフェクト:キャラ[CSelf38[イベントID]][フラッシュ] R100/G-50/B-50 (6)フレーム
|||■動作指定:キャラ[CSelf38[イベントID]] / ジャンプ-右0下0
|||■ピクチャ消去:CSelf15[ピクチャ番号] / 0(0)フレーム
|||■ループ中断
|||■
||◇分岐終了◇
||■
|◇分岐終了◇
|■
◇ループここまで◇◇

WoditorEvCOMMAND_START
[121][4,0]<0>(1600015,301,0,0)()
[124][4,0]<0>(1600030,16384,1600015,0)()
[124][4,0]<0>(1600031,16384,1600015,1)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" ")
[103][0,1]<0>()(" ")
[121][4,0]<0>(1600038,0,0,0)()
[179][1,0]<0>(10)()
[121][4,0]<1>(1600038,1,0,256)()
[124][4,0]<1>(1600037,4096,1600038,8)()
[111][4,0]<1>(1,1600037,2,5)()
[401][1,0]<1>(1)()
[176][0,0]<2>()()
[0][0,0]<2>()()
[499][0,0]<1>()()
[124][4,0]<1>(1600032,4096,1600038,6)()
[124][4,0]<1>(1600033,4096,1600038,7)()
[121][4,0]<1>(1600033,5,0,512)()
[121][4,0]<1>(1600034,1600030,1600032,6144)()
[121][4,0]<1>(1600035,1600031,1600033,6144)()
[111][4,0]<1>(1,1600034,5,3)()
[401][1,0]<1>(1)()
[111][4,0]<2>(1,1600035,10,3)()
[401][1,0]<2>(1)()
[290][7,0]<3>(1,6,1600038,0,100,-50,-50)()
[103][1,1]<3>()("【手作業で設定してください】■動作指定:キャラ[CSelf38[イベントID]] / ジャンプ-右0下0")
[150][3,0]<3>(7970,1600015,0)()
[171][0,0]<3>()()
[0][0,0]<3>()()
[499][0,0]<2>()()
[0][0,0]<2>()()
[499][0,0]<1>()()
[0][0,0]<1>()()
[498][0,0]<0>()()
WoditorEvCOMMAND_END

※動作指定はイベントコードにできないので、手作業で設定してください。


記事No: 21533 [関連記事]
タイトルRe: STGゲームにおける自機発射弾ピクチャの消し方
投稿日: 2023/05/23 20:23
投稿者影月 [riFrFOrO579(海外)]

いやあここまで長々とコモンを書いてくださり助かりました!
試したところ無事動作いたしまして問題なさそうです。

ありがとうございました