「GameMaker Studio 2」を使ってゲーム開発を行っていると、オブジェクト同士の衝突時に動きの速さを調整したい場合があります。例えば、path_startを使用して動いているオブジェクトが壁(obj_wall)に衝突した際、その速さを遅くする方法について解説します。
1. path_startによるオブジェクトの動きと衝突判定
GameMaker Studio 2では、path_startを使ってオブジェクトを特定のパスに沿って移動させることができます。これはゲーム内でキャラクターやオブジェクトが決められたルートに従って動くために便利な方法ですが、他のオブジェクト(例えば壁や障害物)との衝突時に速さを変えるためには、追加の処理が必要です。
path_startを使っている場合、オブジェクトは指定されたスピードでパスに沿って移動しますが、衝突時にそのスピードを変更するためには、衝突判定とスピード調整の処理を行う必要があります。
2. 衝突時に速さを遅らせる方法
オブジェクトが壁(obj_wall)に衝突した際にその速さを遅くする方法として、以下のような手法が考えられます。
if (place_meeting(x, y, obj_wall)) {
path_speed = path_speed / 2; // 衝突時に速さを半分にする
}
このコードでは、オブジェクトがobj_wallに衝突したとき、`path_speed`(パスの速さ)を半分にしています。この方法を使うことで、オブジェクトの速さを一時的に遅くすることができます。
必要に応じて、`path_speed`の値を調整して速さを遅くする程度を変更することもできます。例えば、速さを4分の1にするには、`path_speed = path_speed / 4`のように変更します。
3. 衝突後に速さを元に戻す
オブジェクトが壁に衝突した後、速さを元に戻したい場合は、一定の時間が経過した後に速さを元に戻す処理を追加することができます。これを実現するためには、タイマーを使って速さを元に戻す方法が有効です。
if (place_meeting(x, y, obj_wall)) {
path_speed = path_speed / 2;
alarm[0] = 30; // 30フレーム後に速さを元に戻す
}
if (alarm[0] > 0) {
path_speed = path_speed * 2; // 元の速さに戻す
}
このコードでは、衝突時に速さを遅くし、その後30フレームが経過した後に速さを元に戻す処理を行っています。`alarm[0]`を使って一定の時間後に処理を実行する方法です。
4. より高度な調整方法
さらに高度な調整を行う場合、衝突時に速さを徐々に遅くする方法もあります。これにより、より自然な動きが実現できます。以下は、速さを徐々に遅くする例です。
if (place_meeting(x, y, obj_wall)) {
path_speed = max(path_speed - 0.1, 0); // 速さを徐々に減らす
}
この方法では、`path_speed`を少しずつ減らしていき、最終的に速さが0に近づいていきます。`0.1`の部分は減速のスピードを調整する値なので、より急激に減速させたい場合はこの数値を大きくします。
まとめ
GameMaker Studio 2でpath_startを使用しているオブジェクトが壁(obj_wall)に衝突した際に速さを遅らせるためには、衝突判定後に速さを変更するコードを追加することが必要です。速さを一時的に減速させる方法や、一定の時間後に速さを元に戻す方法、さらには徐々に減速させる方法を紹介しました。これらを活用して、ゲーム内でリアルでダイナミックな動きを作り出すことができます。
コメント