この記事はこっちの関連記事です。

■変数操作: CSelf14[該当ピクチャ番号] = 0 + 0
■回数付きループ [ 30 ]回
|■変数操作+: CSelf10[自機側X座標] = ピクチャ:1000 の X座標
|■変数操作+: CSelf11[自機側Y座標] = ピクチャ:1000 の Y座標
|■変数操作+: CSelf12[敵側X座標] = ピクチャ:CSelf14[該当ピクチャ番号] の X座標
|■変数操作+: CSelf13[敵側Y座標] = ピクチャ:CSelf14[該当ピクチャ番号] の Y座標
|■変数操作: CSelf16[X絶対値] 絶対値= CSelf10[自機側X座標] - CSelf12[敵側X座標]
|■変数操作: CSelf17[Y絶対値] 絶対値= CSelf11[自機側Y座標] - CSelf13[敵側Y座標]
|■条件分岐(変数): 【1】 CSelf16[X絶対値] が 8 以下
|-◇分岐: 【1】 [ CSelf16[X絶対値] が 8 以下 ]の場合↓
| |■条件分岐(変数): 【1】 CSelf17[Y絶対値] が 8 以下
| |-◇分岐: 【1】 [ CSelf17[Y絶対値] が 8 以下 ]の場合↓
| | |▼ ここにダメージ処理
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■変数操作: CSelf14[該当ピクチャ番号] += 1 + 0
|■
◇ループここまで◇◇

これは主人公をピクチャ1000で表示、敵をピクチャ0~29で表示しているときの当たり判定です。▼ ここにダメージ処理のところに主人公がダメージを受ける時の処理を入れます。起動条件は並列実行(常時)にします。

回数付きループを使ってCSelf14[該当ピクチャ番号]をずらしながらピクチャ0~29がピクチャ1000と重なるかどうかを判定していきます。まず自機と敵の座標を取得して自機の座標から敵の座標を引きます。この時、絶対値を選択すると(プラスマイナスを無視したズレの大きさ)座標の差を求めることができます。

これがXYいづれも8以下のとき(言いかえれば8ピクセルまではズレていてもダメージとして判定)、ダメージ処理に移ります。しかし、このままではダメージ処理が連続で行われてしまうので、無敵時間を設けます。以下がそれを追加した処理です。

■変数操作: CSelf14[該当ピクチャ番号] = 0 + 0
■条件分岐(変数): 【1】 V0[ダメージ無効中 1~] が 1 以上
-◇分岐: 【1】 [ V0[ダメージ無効中 1~] が 1 以上 ]の場合↓
|■変数操作: V0[ダメージ無効中 1~] -= 1 + 0
|■
◇分岐終了◇
■回数付きループ [ 30 ]回
|■変数操作+: CSelf10[自機側X座標] = ピクチャ:1000 の X座標
|■変数操作+: CSelf11[自機側Y座標] = ピクチャ:1000 の Y座標
|■変数操作+: CSelf12[敵側X座標] = ピクチャ:CSelf14[該当ピクチャ番号] の X座標
|■変数操作+: CSelf13[敵側Y座標] = ピクチャ:CSelf14[該当ピクチャ番号] の Y座標
|■変数操作: CSelf16[X絶対値] 絶対値= CSelf10[自機側X座標] - CSelf12[敵側X座標]
|■変数操作: CSelf17[Y絶対値] 絶対値= CSelf11[自機側Y座標] - CSelf13[敵側Y座標]
|■条件分岐(変数): 【1】 CSelf16[X絶対値] が 8 以下
|-◇分岐: 【1】 [ CSelf16[X絶対値] が 8 以下 ]の場合↓
| |■条件分岐(変数): 【1】 CSelf17[Y絶対値] が 8 以下
| |-◇分岐: 【1】 [ CSelf17[Y絶対値] が 8 以下 ]の場合↓
| | |■条件分岐(変数): 【1】 V0[ダメージ無効中 1~] が 0 と同じ
| | |-◇分岐: 【1】 [ V0[ダメージ無効中 1~] が 0 と同じ ]の場合↓
| | | |▼ ここにダメージ処理
| | | |■ピクチャエフェクト:1000 [フラッシュ] R100/G100/B100 (60)フレーム
| | | |■変数操作: V0[ダメージ無効中 1~] = 60 + 0
| | | |■
| | |◇分岐終了◇
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■変数操作: CSelf14[該当ピクチャ番号] += 1 + 0
|■
◇ループここまで◇◇


主人公を光らせるなどして無敵時間であることをアピールしましょう。

2018/10/14追記
上記の処理だと表示されていないピクチャの座標を取得するとX:0 Y:0が代入されてしまい、画面左上の位置で謎のダメージ判定が発生してしまうバグが起きることがわかりました。それを防ぐ処理を加えたものがこちらです。

■条件分岐(変数): 【1】 V0[ダメージ無効中 1~] が 1 以上
-◇分岐: 【1】 [ V0[ダメージ無効中 1~] が 1 以上 ]の場合↓
|■変数操作: V0[ダメージ無効中 1~] -= 1 + 0
|■イベント処理中断
|■
◇分岐終了◇
■変数操作: CSelf14[該当ピクチャ番号] = 0 + 0
■回数付きループ [ 30 ]回
|■変数操作+: CSelf18[ピクチャ使用] = ピクチャ:CSelf14[該当ピクチャ番号] の ピクチャが使用中?(1=YES)
|■条件分岐(変数): 【1】 CSelf18[ピクチャ使用] が 1 と同じ
|-◇分岐: 【1】 [ CSelf18[ピクチャ使用] が 1 と同じ ]の場合↓
| |■変数操作+: CSelf10[自機側X座標] = ピクチャ:1000 の X座標
| |■変数操作+: CSelf11[自機側Y座標] = ピクチャ:1000 の Y座標
| |■変数操作+: CSelf12[敵側X座標] = ピクチャ:CSelf14[該当ピクチャ番号] の X座標
| |■変数操作+: CSelf13[敵側Y座標] = ピクチャ:CSelf14[該当ピクチャ番号] の Y座標
| |■変数操作: CSelf16[X絶対値] 絶対値= CSelf10[自機側X座標] - CSelf12[敵側X座標]
| |■変数操作: CSelf17[Y絶対値] 絶対値= CSelf11[自機側Y座標] - CSelf13[敵側Y座標]
| |■条件分岐(変数): 【1】 CSelf16[X絶対値] が 8 以下
| |-◇分岐: 【1】 [ CSelf16[X絶対値] が 8 以下 ]の場合↓
| | |■条件分岐(変数): 【1】 CSelf17[Y絶対値] が 8 以下
| | |-◇分岐: 【1】 [ CSelf17[Y絶対値] が 8 以下 ]の場合↓
| | | |■条件分岐(変数): 【1】 V0[ダメージ無効中 1~] が 0 と同じ
| | | |-◇分岐: 【1】 [ V0[ダメージ無効中 1~] が 0 と同じ ]の場合↓
| | | | |■▼ ここにダメージ処理
| | | | |■ピクチャエフェクト:1000 [フラッシュ] R100/G100/B100 (60)フレーム
| | | | |■変数操作: V0[ダメージ無効中 1~] = 60 + 0
| | | |◇分岐終了◇
| | | |■
| | |◇分岐終了◇
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■変数操作: CSelf14[該当ピクチャ番号] += 1 + 0
|■
◇ループここまで◇◇