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

記事No: 21730 [関連記事]
タイトル当たり判定の処理を軽くしたい
投稿日: 2025/07/09 21:55
投稿者かみぶくろ [FrepeeO837]

当たり判定の処理を軽くしたい (画像サイズ: 573×635 57kB)

[やりたいこと]
STGで大量弾幕でも処理を軽くしたい
[やってみたこと]
敵弾や敵の画像サイズから始点と終点を設定して、その内側に自機や自弾が入ったら当たり判定を出しました。
[やってみた結果、どううまくいかないか]
少数なら問題ないが、弾数が増えると処理が重くなり、カクついてしまいます。
使用していない画像はチェック判定を外すなどはしています。

画像の敵弾判定の範囲は150で、自弾や別のものを含めると500程当たり判定を行います。


記事No: 21731 [関連記事]
タイトルRe: 当たり判定の処理を軽くしたい
投稿日: 2025/07/10 19:12
投稿者Masaqq [reFreWe267]

STGの作りこみにはそこまで詳しくはないですが
私から出せるいくつかのアイデアとして

・条件分岐を回数付きループ+ループ中断などで処理できれば
多少軽くなるかもしれません。

・条件チェックを見栄え重視でまとめるのではなく
例えば、
1. X軸に必要な変数取得と計算処理
2a. X軸内だった時→Y軸に必要な取得と処理
2b. X軸外ならY軸計算は飛ばして次へ
※XとY、どっちが計算量が多いかはUIによって変わる

という感じに処理重視にして、ムダな式もなるべく省略して
全体の処理コードを減らす工夫も重要かと思います。
(この部分の改善案は画像とコードで投げておきます)

・無敵になってダメージ計算をそれ以上しなくてよいのなら
イベント処理中断やラベルジャンプでループ処理を終わらせることも検討してください。

・弾生成時のピクチャ番号が++1しているなら
最新生成地点から逆算(--1)していった方が
計算コストが下がるかもしれません。


参考としてはCi-enにある下記記事もどうぞ

『ウディタ3以降で開発するときに意識したい処理負荷解説』
ci-en.net/creator/16060/article/952289#0b6cd98896


■以下、改善案サンプルのイベントコード■

WoditorEvCOMMAND_START
[124][4,0]<0>(1600018,16384,101,0)()
[124][4,0]<0>(1600019,16384,101,1)()
[121][4,0]<0>(1600035,1600052,0,0)()
[121][4,0]<0>(1600039,1600053,1600052,4096)()
[121][4,0]<0>(1600039,1,0,256)()
[179][1,0]<0>(1600039)()
[124][4,0]<1>(1600038,16384,1600035,9)()
[179][1,0]<1>(1600038)()
[124][4,0]<2>(1600028,16384,1600035,0)()
[121][4,0]<2>(1600020,1600018,1600028,4096)()
[179][1,0]<2>(1600020)()
[121][4,0]<3>(1600020,1600028,1600048,0)()
[121][4,0]<3>(1600020,1600018,0,512)()
[179][1,0]<3>(1600020)()
[124][4,0]<4>(1600029,16384,1600035,1)()
[121][4,0]<4>(1600020,1600019,1600029,4096)()
[179][1,0]<4>(1600020)()
[121][4,0]<5>(1600020,1600029,1600049,0)()
[121][4,0]<5>(1600020,1600019,0,512)()
[179][1,0]<5>(1600020)()
[103][0,1]<6>()(" ")
[103][0,1]<6>()("ヒット結果やダメージ処理")
[103][0,1]<6>()(" ")
[171][0,0]<6>()()
[0][0,0]<6>()()
[498][0,0]<5>()()
[171][0,0]<5>()()
[0][0,0]<5>()()
[498][0,0]<4>()()
[171][0,0]<4>()()
[0][0,0]<4>()()
[498][0,0]<3>()()
[171][0,0]<3>()()
[0][0,0]<3>()()
[498][0,0]<2>()()
[171][0,0]<2>()()
[0][0,0]<2>()()
[498][0,0]<1>()()
[121][4,0]<1>(1600035,1,0,256)()
[0][0,0]<1>()()
[498][0,0]<0>()()
WoditorEvCOMMAND_END

以上になります。

> [やりたいこと]
> STGで大量弾幕でも処理を軽くしたい
> [やってみたこと]
> 敵弾や敵の画像サイズから始点と終点を設定して、その内側に自機や自弾が入ったら当たり判定を出しました。
> [やってみた結果、どううまくいかないか]
> 少数なら問題ないが、弾数が増えると処理が重くなり、カクついてしまいます。
> 使用していない画像はチェック判定を外すなどはしています。
>
> 画像の敵弾判定の範囲は150で、自弾や別のものを含めると500程当たり判定を行います。


記事No: 21732 [関連記事]
タイトル画像添付(再送)
投稿日: 2025/07/10 19:18
投稿者Masaqq [reFreWe267]

画像添付(再送) (画像サイズ: 897×754 75kB)

なぜか画像が添付されてなかったので再送


記事No: 21733 [関連記事]
タイトルRe: 当たり判定の処理を軽くしたい
投稿日: 2025/07/10 23:32
投稿者かみぶくろ [FrepeeO837]

ご意見ありがとうございます。

条件分岐って処理としては重いんですね、参考にさせてもらいます。

貴重なアドバイスありがとうございます、試してみます。