メインコンテンツへスキップ

GameMakerで作成するポーズ機能

    GameMakerでポーズ機能を作成してみます。

    1:pauseオブジェクトを作成する。

    画像
    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させています。

    もし何かあれば、

    https://x.com/StgFreak

    に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 );
    を追記する。

    こうする事で、ポーズ中にスクロールし続けるのを止めます。

    あなたへのおすすめ