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程当たり判定を行います。