
落とし穴 破壊と登場の問題?
前回の落とし穴
前回は、アニメーションを色替えして複数同時再生に挑戦した。
今回は、地形ブロックを破壊してゴーレムが登場するシーンが、なかなかうまくいかなかったので記録しておく。
今日のドット絵


今日のクライマックス

落とし穴の想い出 hole.io
落とし穴を移動させて色んな物を落とすことで大きくなって建物とかまで全部落とすゲーム。塊魂の落とし穴版。対戦機能もある。
アイデア次第で、まだまだ、ヘンテコなことができるんだよなー。
穴を着せ替え出来るみたいだけど、課金要素が弱いのでソシャゲ向きではなかった気がする。
破壊と登場を作りたい!
地形ブロックを破壊して消す時に、instance_create_layerでゴーレムを呼び出せば簡単!と思ったけど、なかなかうまくいかなかったので記録しておく。
問題
①登場後、すぐに鬼プレスに来る
②登場したゴーレムが壊れたブロックの位置に登場しない

問題①:登場したゴーレムがすぐに鬼プレスに来る
①appearフラグを設定
②登場した瞬間にappearフラグをtrueにして、待機状態にして動けなくする
③appearがtrueの間はコリジョンチェックをしないことで地形ブロックにも
プレイヤーにも干渉しない
④一定時間経ったらappearをfalseにして動けるようにする

これで登場後すぐに移動したり索敵して鬼プレスにきたりはしなくなったが、下のブロックの上に登場し、しばらく経ってから押し出されている。
問題②:破壊したブロックの位置に登場しない
instance_create_layer(x,y,"Instances",obj_golem);
instance_create_layerを使って、壊したブロックの中心点の位置に出現させているが、下のブロックの位置に出現している。
作戦A:ブロックが壊れてしばらくしてから出現させる
①ブロックが壊れた瞬間にゴーレム(obj_golem)を呼び出すのではなく、
登場(obj_golem_appear)という別オブジェクトを呼び出す
②obj_golem_appearでalarmでしばらく経ってからゴーレムを呼び出す
でも変わらない。これで壊れたブロックとは干渉しないはず。。。

あっ!
そもそもブロックを上下に重ねてたやん!
中心点が前のブロックに重なってるんやから、前のブロックの上に登場すんのは当たり前やんけ!


アホ過ぎる。。。
作戦B:周辺のブロックを破壊する
①ブロックが壊れる時に、以下を発生
・破壊エフェクトの大きな煙(obj_smoke_big)
・当たり判定だけのオブジェクト(obj_breaker)
・ゴーレム登場オブジェクト(ob_golem_appear)
②obj_breakerが地形ブロックに当たると壊れるようにする
③obj_breaker用のスプライトは、上下に少し大きい32x36のものを用意
地形ブロックのステップイベント
if (life <= 0){
var _ran = irandom(20);
if (_ran >= 15 and instance_number(obj_golem) < 2) { // ゴーレムが確率で出現する時
instance_create_layer(x, y,"hitmark",obj_damage_breaker); // 破壊オブジェクト発生
instance_create_layer(x, y,"hitmark",obj_smoke_big); // 煙大
instance_create_layer(x,y,"Instances",obj_golem_appear); // ゴーレム登場用オブジェクト
} else instance_create_layer(x, y,"hitmark",obj_smoke_s); // ゴーレムが出ない時は普通の煙を出す
instance_destroy(shadow_instance); // 影を消す
instance_destroy();
}
破壊オブジェクト(obj_breaker)と地形ブロックのコリジョンイベント
other.life -= 10;
破壊オブジェクトはアニメーション終了時に消した。
破壊オブジェクト用のスプライト
・破壊オブジェクト用のスプライトは画像は必要ない
・サイズはなんぼでも構わないけど32x40に設定(コリジョンが大事)
・コリジョンを手動で設定(今回は28x39)
・中心点は中の中

「地形ブロックを破壊するとゴーレム登場」ができた!!!


疲れたので今日はここまで

使用ツール
ゲームツールは「GameMaker」
ドット絵ツールは「EDGE」
AIは「ChatGPT」