とりあえずなんか書いとけ

Python3系とかアイワナ(GM8.1 Standard)とか読書とか

アイワナ:ボスの基礎を作成する

この記事では主に「無敵時間の作成」とか「当たり判定の調整」とかとかそういう「攻撃パターン以外」の部分について書きます.
攻撃パターンとかについてはまたどこかで書くかもしれません.
まずは適当なボスのスプライトを作るところから.

ボスの当たり判定を作成する

spriteを作成する段階でボスの当たり判定の調整をしていきます.
「ボスにオーラっぽいの付けたくてGlowってエフェクトをかけたけど,オーラ部分には当たり判定付けたくない!」みたいなことってありますよね.
そういう時に使えるのがこの「Modify Mask」という機能です.

f:id:toki_0177:20190121210903p:plain
作成したスプライトの例とModify Maskボタン
ここをクリックして開いたウィンドウでいろんな数字をいじって自分の望んだ当たり判定になるように調整しましょう.
今回の場合は透過度でいい感じに分けられそうなので,「Alpha Tolerance」の数値をいじります.
128ぐらいにしてあげると図の左だった当たり判定が右になります.
今回はいじりませんでしたが,「Bounding Box」をいじると座標で当たり判定の有無を分けられたりもします.これも便利.
f:id:toki_0177:20190121211723p:plain
Modify Maskの画面

適当なボスのオブジェクトを作る

さっき作ったspriteを使用して適当なボスのオブジェクトを作ります.
ParentをplayerKillerにするとか,攻撃パターン作るとか.
無敵時間以外については今回は触れません.
次からいよいよ無敵時間についてです.

無敵時間を作る

結論から言うと「Collision bullet」イベントと「alarm[11]」に以下のコードをそれぞれ追加すればいい感じになります.

//collision bullet event
with(other)instance_destroy()
sound_play(sndBossHit)

if(muteki == 0){
  muteki = 1
  hp -= 1
  image_blend = make_color_rgb(128, 128, 128)
  alarm[11] = 60
}
//alarm[11]
muteki = 0
image_blend = -1

ここからは簡単にコードの解説を行っていきましょう.
Collision bullet
1行目:ヒットした弾を破壊する(複数回当たるのを防ぐ)
2行目:ヒット音を鳴らす
4行目:無敵時間中かどうかの判定
5行目:無敵時間中であるかどうかを示すフラグをオン
6行目:ボスのHPを減らす処理
7行目:ボスの色を変える処理(無敵時間であることをわかりやすく:詳しくは後述)
8行目:ボスの無敵時間解除を60ステップ後に設定


alarm[11]
1行目:無敵時間中であるかどうかを示すフラグをオフ
2行目:ボスの色をもとに戻す処理

image_blendとは?

7行目とかで使っているimage_blendの部分について詳しく説明していきます.
この変数はなかなか面白い変数で,簡単に言うとspriteに指定した色を重ね合わせることができる機能です.
(この機能に最近気づいたのでこの記事を書こうと思いました.)
(気づく前までは無敵時間用に色を変えたspriteを作ってましたが,複数スプライトある時にめんどくさいなあと思って色々調べてこの方法を見つけました.)
この機能の少し特殊なこととしては,白(R:255, G:255, B:255)は透過度100,黒(R0:, G:0, B:0)が透過度0になることです(たぶん).
この特徴を考えると,さっきの処理は透過度50でsprite全体を黒く塗るという処理です.
一定時間で元の色に戻り,無敵状態も解除されます.

f:id:toki_0177:20190121235651p:plain
無敵時間中の見た目
試していないからわからないけどmake_color_hsv()を使えば色相(H)と彩度(S)で色を決められて,明度(V)で透明度を決められるのかもしれないとか思ったり.