GameMakerで作成するポーズ機能
GameMakerでポーズ機能を作成してみます。
1:pauseオブジェクトを作成する。

roomに入った時に作成するのが望ましいです。
作成する場所は、
1:ルームクリエイトのcreateで記述する。
2:ルームスタートみたいなスクリプトを作成して、
その中に記述する。
2:pauseオブジェクトの中身を記述する。
2-1:作成(create)での記述

pause = 0 ;
time = 0 ;
pause_suface = 0;
depth = 0;
2-2:ステップ(STEP)での記述
switch(pause)
{
case 0: // Pauseじゃない時。
if(keyboard_check_pressed(vk_enter) or
gamepad_button_check_pressed(0,gp_start) )
{
pause=1;
time = 16;
pause_suface =
sprite_create_from_surface(application_surface,0,0,mac_wx,mac_wy,true,false,0,0);
}
break;
case 1: // Pause中。
instance_deactivate_all(true);
instance_activate_object(obj_pause);
// Pause解除
if(time > 0)time--
if(time <= 0)
if(keyboard_check_pressed(vk_enter) or gamepad_button_check_pressed(0,gp_start) )
{
instance_activate_all();
pause = 0 ;
if(sprite_exists(pause_suface))
{
sprite_delete(pause_suface);
}
}
break; // Pause中を抜ける。
2-2:のステップでは、
switchを利用しています。
ポーズしていない時にスタートボタンを押されると、
スクリーンショットをメモリに格納し、
タイムを16にします。
また、
動いているオブジェクトをポーズ以外止めたいので、
一度、全てを停止させた直後にポーズオブジェクトのみアクティブにしています。
ポーズしている時は、
全てをアクティブにする、
メモリを解放する、
の処理をしています。
mac_wxとmac_wyは、
#macro mac_wx 1280
#macro mac_wy 720
などと、マクロで記述するなどして下さい。
また、私は個人的に、
scr_macro というスクリプトを作成して、マクロはそこで一覧にしています。
2-3:描画の処理
switch(pause)
{
case 1:
draw_sprite_ext(pause_suface,0,0,0,1,1,0,-1,1);
var str = "Pause"
var str_ = string_width(str)
scr_string_color(room_width/2 -str_*2,
room_height/2 ,str,4.0)
break;
}
描画では、ポーズ中のみ、スクショした画像とPauseの文字列を描画しています。
※個人的には、ポーズ中にも色々な処理を追加して使用していますが、
ポーズ機能に絞って記述すると、こういう一例になりました。
3:確認する。
何故か、私はポーズ画像をアップロード出来ないので、
ここでは省略しますが、
普段はこんな感じで使用しています。
もし、ポーズ中に装備を変えたり、ステータス表示をしたい。
なんて時は、ポーズ中のみの場所に記述をします。
その為に、ポーズ中(1)か、そうでないか(0)でswitchさせています。
もし何かあれば、
にDMを頂ければ、気が向いた時に返信するかもしれません。
4:追記
バックグラウンドでルームでスクロールをしている時について。
ステップで以下を追記します。
case 0:
_bgvs = layer_get_vspeed(layer_get_id( "Background" ))
_bghs = layer_get_hspeed(layer_get_id( "Background" ))
layer_vspeed (layer_get_id( "Background" ), 0 );
layer_hspeed (layer_get_id( "Background" ), 0 );
case 1:
ボタンを押された時の中に
layer_vspeed (layer_get_id( "Background" ), _bgvs );
layer_hspeed (layer_get_id( "Background" ), _bghs );
を追記する。
こうする事で、ポーズ中にスクロールし続けるのを止めます。