🖥️

[GMS2]スクリーンショットの撮り方

2022/03/01に公開

GameMaker Studio2でスクリーンショット(静止画・GIF画像)を撮る方法についてのメモです。

下記のように、スクリーンショットキャプチャ用のObjectを作成し、ゲームの最初のルームに配置するだけです。
ルームをまたいでのGIF画像の記録も可能なように、ObjectはPersistentにチェックを入れておくと良いです。


※ルーム編集画面で分かりやすいように、適当なスプライトを割り当てていますが、特に必要ありません。


obj_screen_captureの中身

Createイベント

num = 1; //記録したGIF画像のファイル名に連番をつけるための変数
ss_num = 1; //記録したスクリーンショット画像のファイル名に連番をつけるための変数

gif_record = false; //GIF画像のレコーディング中/停止中の切り替え変数

Stepイベント

// ここでは、キーボードのSキーを押すとスクリーンショットが撮れるようにする
if keyboard_check_pressed(ord("S"))
    {
	var _path = working_directory + "Screens/Screen_" + string(ss_num++) + ".png";
	screen_save(_path);
    }

Drawイベント

//何も記述しない。空のDrawイベントを作成しておくと、
//オブジェクトにスプライトが割り当てられていても、表示されなくなるので、
//仮スプライトがゲーム中に間違って表示されてしまうことを未然に防いでおく。

Post Drawイベント

// ここでは、キーボードのGキーを押すとGIF画像のレコーディングが開始/停止されるようにする
if (keyboard_check_pressed(ord("G"))){
	gif_record = !gif_record;
	
	if (gif_record == true){
		//記録する画面のサイズをここで指定。スクロールのあるゲームなどの場合、roomのサイズでなく、view_wportなど、カメラで写している範囲を設定する。
		gif = gif_open(room_width,room_height);
		// 一応デバッグメッセージにレコーディング開始を表示
		show_debug_message("gif recording start");
	}
	else {
		gif_save(gif, working_directory + "CapturedGif_"+string(num)+".gif");
		// 一応デバッグメッセージに保存場所のパスを表示
		show_debug_message(working_directory);
		show_debug_message("gif recording end");
		num++;
	}
}

// ここで毎フレームの画面をGIF画像として追加していく
if (gif_record == true){

	// このブロックは、GUIレイヤーをキャプチャしたくなければ必要ないが、
	// もしGUIごとキャプチャしたい場合は、
	// すべてのGUIを、別サーフェス(下記の場合だとglobal.gui_surface)に
	// 作成しておいて、それをapplication_surfaceにコピーする。
	//surface_set_target(application_surface);
	//draw_surface(global.gui_surface,0,0);
	//surface_reset_target();
	
	gif_add_surface(gif,application_surface,2,0,0,2);
}


上記のObjectで、スクリーンショットを撮ることができます。

Discussion