4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GameMaker StudioAdvent Calendar 2020

Day 17

【GameMaker Studio2】Room間移動の実装方法(GML)

Posted at

GameMakerバージョン:2.3.1
モデル:見下ろし視点の2Dゲーム

2Dのアクション・RPGゲームを制作する上で、
日本語の資料が見つからず実装に時間がかかった部分をまとめました。

#Room間の移動について
▼Room1
1.png
▼Room2
2.png

今回はRoom1とRoom2という2つのRoomを自由に行き来するのが目的です。

7ab67d1e-a100-4373-aaac-bf8f69dca3ba.png Playerオブジェクト
77ef5cac-d83b-4266-bf7d-c7a664c01667.png Step1オブジェクト
157a84a4-b626-4316-97ff-00bde4907c29.png Step2オブジェクト

自由に動かせるプレイヤー(Player)と階段のオブジェクト(Step1、Step2)を用意しました。
このプレイヤーが階段に接触することで上下の階を行き来できる、という内容を実装します。
階段以外でも扉やワープポイント等、応用可能です。

#Playerオブジェクト側の設定

まずはPlayerオブジェクトを開き、
Persistentにチェックを入れます。

3.png

Playerオブジェクトのイベントを作成します。
Add Event内からOther→Room Startを作成し、以下のコードを記述します。

RoomStartイベント
x = player_x;
y = player_y;

次にCollisionイベントを作成します。
Collision→Objects→Step1を選択し、
プレイヤーが階段に接触した際にRoomを移動するためのコードを記述します。

Step1イベント
player_x = other.target_x;
player_y = other.target_y;
room_goto(other.targetRoom);

同様にStep2とのCollisionイベントも作成し、以下のコードを記述します。

Step2イベント
player_x = other.target_x;
player_y = other.target_y;
room_goto(other.targetRoom);

5.png

これでPlayerオブジェクト側の設定は完了です。
Stepイベントが作成されていますが、
プレイヤーを動かすためのコードが書かれているだけです。
本記事では使用しないため、無視して大丈夫です。

#Sprite無しのオブジェクトを作成

空のオブジェクトを一つ作成します。
ゲームの裏側で動作するオブジェクトになるため、Spriteは設定しません。

4.png

名前はなんでも大丈夫です。今回はSystemオブジェクトとしました。
このSystemオブジェクトのイベントを作成します。
Other内のGameStartイベントを作成し、以下のコードを記述します。

GameStartイベント
Player.player_x = Player.xstart;
Player.player_y = Player.ystart;

6.png

作成したSystemオブジェクトをRoom1の適当な場所に設置します。

#階段の設置

この段階で階段のオブジェクト(Step1、Step2)は空のオブジェクトです。
階段のSpriteが設定されているのみで、イベントは何もない状態ですが問題ありません。

7.png
8.png

最初に作成した階段オブジェクトをRoomに設置します。
Room1には地下に降りる階段(Step1)、
Room2には地上に出る階段(Step2)をそれぞれ設置し、
この2つのRoom間を移動できるようにします。

9.png

まずはRoom1を開き、設置したStep1のインスタンスをダブルクリックします。
Creation Codeを開き、以下のコードを記述します。

CreationCode
targetRoom = Room2;
target_x = 890;
target_y = 540;

Room2を開き、同じようにStep2のインスタンスをダブルクリック、
Creation Codeで以下のコードを記述します。

CreationCode
targetRoom = Room1;
target_x = 635;
target_y = 380;

1.gif

Playerオブジェクトを設置してRunを実行すると、
プレイヤーが階段に接触した際にRoom移動ができていることが分かります。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?