「普段は透明だけど触れると見えるようになるブロック」
がデフォルトで搭載されていると思います。
そのブロックは存在しないわけではなく透明になっているだけで、また上下左右どの方向から触れても見えるようになります。
しかし、そうではなくマ○オブラザーズに登場するような
「下から触れたときにのみ現れ、それまでは存在していないブロック」
の作り方を紹介します。
隠しブロックの作り方
まずはスプライトを用意します。デザインはご自由にどうぞ。
次にオブジェクトを作るのですが、1つのオブジェクトで隠しブロックを再現するのは難しいというかおそらく不可能なので
隠しブロックのオブジェクトと隠しブロックを作るオブジェクトの2つのオブジェクトを使います。
まずは隠しブロックのオブジェクト(kakushiblockとします)を作ります。
下の写真のように設定してください。
隠しブロックとは言っても出現した後はただのブロックなのでイベントを設定する必要はありません。
次に隠しブロックを作るオブジェクト(kakushiblockmakerとします)を作ります。
スプライトは隠しブロックのオブジェクトと同じもの、もしくは同じ判定のものにしてください。
またvisibleとsolidにはチェックをつけず、parentには何も設定しないでください。
playerとのcollisionイベントに以下のコードを入力。
flag = 1;
stepイベントに以下を入力。
if(player.vspeed < 0){
if(place_meeting(x,y-player.vspeed,player)){
if(flag = 0){
instance_create(x,y,kakushiblock);
instance_destroy();
}
}
}
if(flag > 0){
flag = 0;
}
あとはkakushiblockmakerをルーム内に置くだけで完成です。
仕組みの解説
最初に隠しブロックの仕様について下の図を見ながら整理します。
①ブロックより下側から上に向かって触れたときに出現する。
②下以外の方向から触れたときには出現しない。
③ブロックに触れた状態から上に向かって移動しても出現しない。
この3つを表現するためにkakushiblockmakerに入力するコードについて解説します。
まずstepイベントに入力したコードについて。
if(player.vspeed < 0){
//playerの速度が上向きかを判定
if(place_meeting(x,y-player.vspeed,player)){
あとはkakushiblockmakerをルーム内に置くだけで完成です。
仕組みの解説
最初に隠しブロックの仕様について下の図を見ながら整理します。
①ブロックより下側から上に向かって触れたときに出現する。
②下以外の方向から触れたときには出現しない。
③ブロックに触れた状態から上に向かって移動しても出現しない。
この3つを表現するためにkakushiblockmakerに入力するコードについて解説します。
まずstepイベントに入力したコードについて。
if(player.vspeed < 0){
//playerの速度が上向きかを判定
if(place_meeting(x,y-player.vspeed,player)){
//playerがブロックの下にぶつかったかを判定
これは①と②を表現するためのコードです。
次に③を表現するためのコードです。
collisionイベントに入力した
flag = 1;
stepイベントに入力した
if(flag > 0){
これは①と②を表現するためのコードです。
次に③を表現するためのコードです。
collisionイベントに入力した
flag = 1;
stepイベントに入力した
if(flag > 0){
flag = 0;
}
これによりplayerがkakushiblockmakerに触れているときは変数flagを1に、触れていないときは0になります。
そして以下のように入力することでflagが0のときにだけ、つまりplayerが触れていないときにだけブロックが出現するようになります。
以上が隠しブロックの作り方と解説です。
これによりplayerがkakushiblockmakerに触れているときは変数flagを1に、触れていないときは0になります。
そして以下のように入力することでflagが0のときにだけ、つまりplayerが触れていないときにだけブロックが出現するようになります。
if(flag = 0){
instance_create(x,y,kakushiblock); //オブジェクトkakushiblockを生成
以上が隠しブロックの作り方と解説です。