brown water

ゲームやアニメの感想とかプログラムとか

ジャンプゲームの制作2

前回に引き続きジャンプゲームの制作です。

トラップの制作

f:id:chaz4:20180415172712p:plain

トラップに当たったらゲームオーバー、即リトライという仕様。

f:id:chaz4:20180415172630p:plain

Alarm0にリスタートを設定しておいて、後でこれを呼び出すことにします。

プレイヤーとの衝突イベントにコードを書いていきます。

with(other) {
    effect_create_below(ef_firework, x, y, 2, c_fuchsia);
    instance_destroy();
    audio_play_sound(snd_damage, 10, false);

alarm[0] = room_speed;

コードの内容は、エフェクトを出しながらプレイヤーのオブジェクトを消去してサウンドを鳴らす。 そしてアラーム0をルームスピード(1秒後)に設定。1秒後に先程のアラーム(リスタート)が発動する。

動く床の制作

f:id:chaz4:20180415172721p:plain

一定周期で左右に移動する床で、上にプレイヤーが乗ることが出来る。

f:id:chaz4:20180415172613p:plain

床と同じような衝突処理にしたいのでParentに床を設定。

CreateとStepイベントのコードを書いていきます。

maxLeft = xstart - 64;
maxRight = xstart + 64;
m_hsp = 1;

左右の折り返し位置をスタート地点から2ブロック分に設定

///移動
//プレイヤーと水平方向に衝突した時は押し出す
if place_meeting(x+m_hsp, y, obj_player) {
    while(!place_meeting(x+sign(m_hsp), y, obj_player)) x += sign(m_hsp);
    obj_player.x += m_hsp;
}

x += m_hsp;
if (x < maxLeft) {
    x = maxLeft;
    m_hsp = -m_hsp;
}
if (x > maxRight) {
    x = maxRight;
    m_hsp = -m_hsp;
}

//上にプレイヤーが乗っている時にプレイヤーを移動させる
if place_meeting(x, y-1, obj_player) && bbox_top >= obj_player.bbox_bottom {
    obj_player.m_hsp = m_hsp;
}

プレイヤーを押し出す処理が少し複雑になってしまった。
なお、プレイヤーがブロックに押されながら壁にぶつかると、そのままめり込んで身動きがとれなくなってしまうことが発覚。
そのため壁からは1ブロック分空けて配置するようにします(笑)

ボーナスアイテムの制作

f:id:chaz4:20180415172724p:plain

取らなくてもクリアは可能だが、取るとボーナスが貰える宝石。
プレイヤーとの衝突イベントにコードを書いていきます。

effect_create_below(ef_flare, x, y, 2, c_green);
instance_destroy();
audio_play_sound(snd_getjewel, 10, false);

とりあえずは衝突したら自信を消去してサウンドを鳴らすだけ。

ここまで作ってテストプレイ。ゴールはまだ飾りです。

f:id:chaz4:20180415172623p:plain

次回は数ステージ作って完成まで行きたいと思います。