1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【renpy】タイマー付きモーダル待機画面

Posted at
renpy
init python:
    time_left = 10
    is_modal = True

    def decrease_time():
        global time_left, is_modal
        if time_left > 0:
            time_left -= 1
            if time_left == 0:
                is_modal = False
                # いったんscreenを隠して、再度表示
                renpy.hide_screen("show_timer")
                renpy.call_in_new_context("display_timer_screen_again")

label display_timer_screen_again:
    show screen show_timer
    return

screen show_timer():
    modal is_modal
    vbox:
        align (0.5, 0.4)
        text "残り時間: [time_left] 秒"
        spacing 20

    timer 1.0 action Function(decrease_time) repeat (time_left > 0)

label start:
    $ time_left = 10
    $ is_modal = True
    show screen show_timer
    "タイマー終了。"
    hide screen show_timer

概要

このコードは、Ren'Py(ビジュアルノベルエンジン)上で使うカウントダウンタイマー付き画面を実現するものです。

プレイヤーの操作を一時的に制限する「モーダル」な状態で、残り時間(秒数)を表示し、1秒ごとに時間を減らしていきます。タイマーが0になるとモーダル状態を解除し、画面の再表示も含めた制御を行った後、タイマー終了メッセージを表示します。

主な特徴や用途:

  • ゲーム内で「一定時間だけ操作を受け付けない」場面や、選択肢・時間制限イベントの演出に使えます。
  • 残り時間をプレイヤーに示すタイマー画面、タイマー終了時の画面再描画処理などをセットで提供しており、Ren’Pyスクリプト特有の画面管理やタイマー処理を自動化しています。

1. decrease_time 関数

概要

制限時間を1秒ずつ減らしていき、ゼロになったらモーダル状態を解除し、タイマー用画面を再表示する処理関数。

定義

def decrease_time():
    global time_left, is_modal
    if time_left > 0:
        time_left -= 1
        if time_left == 0:
            is_modal = False
            # いったんscreenを隠して、再度表示
            renpy.hide_screen("show_timer")
            renpy.call_in_new_context("display_timer_screen_again")

引数

  • なし

グローバル変数

  • time_left(残り時間を示す整数)
  • is_modal(タイマーウィンドウをモーダル表示にするかのブール値)

戻り値

  • なし

詳細

  • 残り時間が0より大きい場合、time_left を1減らします。
  • time_left が0になった場合、タイマー画面(show_timer)を非表示にし、ラベル display_timer_screen_again を新しいコンテキストで呼び出します。
  • モーダル状態も解除されます(is_modal = False)。

2. display_timer_screen_again ラベル

概要

タイマー画面(show_timer画面)を再度表示するためのラベル(ジャンプ先、コールインポイント)。

定義

label display_timer_screen_again:
    show screen show_timer
    return

引数

  • なし

戻り値

  • なし (returnで終了)

詳細

  • show screen show_timer で再度タイマーウィンドウを表示します。
  • 特別な引数や戻り値はありません。

3. show_timer スクリーン

概要

現在の残り時間を表示するタイマー画面。モーダル設定が反映されます。

定義

screen show_timer():
    modal is_modal
    vbox:
        align (0.5, 0.4)
        text "残り時間: [time_left] 秒"
        spacing 20
    timer 1.0 action Function(decrease_time) repeat (time_left > 0)

下記の関数仕様書に従って、前述のプログラムの関数仕様書を書いていただけますか。

概要

このコードは、Ren'Py(ビジュアルノベルエンジン)上で使うカウントダウンタイマー付き画面を実現するものです。

プレイヤーの操作を一時的に制限する「モーダル」な状態で、残り時間(秒数)を表示し、1秒ごとに時間を減らしていきます。タイマーが0になるとモーダル状態を解除し、画面の再表示も含めた制御を行った後、タイマー終了メッセージを表示します。

主な特徴や用途:

  • ゲーム内で「一定時間だけ操作を受け付けない」場面や、選択肢・時間制限イベントの演出に使えます。
  • 残り時間をプレイヤーに示すタイマー画面、タイマー終了時の画面再描画処理などをセットで提供しており、Ren’Pyスクリプト特有の画面管理やタイマー処理を自動化しています。

1. decrease_time 関数

概要

制限時間を1秒ずつ減らしていき、ゼロになったらモーダル状態を解除し、タイマー用画面を再表示する処理関数。

定義

def decrease_time():
    global time_left, is_modal
    if time_left > 0:
        time_left -= 1
        if time_left == 0:
            is_modal = False
            # いったんscreenを隠して、再度表示
            renpy.hide_screen("show_timer")
            renpy.call_in_new_context("display_timer_screen_again")

引数

  • なし

グローバル変数

  • time_left(残り時間を示す整数)
  • is_modal(タイマーウィンドウをモーダル表示にするかのブール値)

戻り値

  • なし

詳細

  • 残り時間が0より大きい場合、time_left を1減らします。
  • time_left が0になった場合、タイマー画面(show_timer)を非表示にし、ラベル display_timer_screen_again を新しいコンテキストで呼び出します。
  • モーダル状態も解除されます(is_modal = False)。

2. display_timer_screen_again ラベル

概要

タイマー画面(show_timer画面)を再度表示するためのラベル(ジャンプ先、コールインポイント)。

定義

label display_timer_screen_again:
    show screen show_timer
    return

引数

  • なし

戻り値

  • なし (returnで終了)

詳細

  • show screen show_timer で再度タイマーウィンドウを表示します。
  • 特別な引数や戻り値はありません。

3. show_timer スクリーン

概要

現在の残り時間を表示するタイマー画面。モーダル設定が反映されます。

定義

screen show_timer():
    modal is_modal
    vbox:
        align (0.5, 0.4)
        text "残り時間: [time_left] 秒"
        spacing 20
    timer 1.0 action Function(decrease_time) repeat (time_left > 0)

引数

  • なし(screen propertyあり:なし)

コンポーネント

  • modal is_modal
    画面をモーダルとして動作させる(is_modalがTrueのときクリックや入力をブロック)
  • vbox/align/text
    画面中央付近に「残り時間: ○秒」のテキストを表示
  • timer
    1秒ごとに decrease_time を呼び、残り時間が0になるまで繰り返す

4. start ラベル(エントリーポイント)

概要

プレイ開始時の初期化ラベル。残り時間とモーダル状態の初期化、およびタイマー画面の表示と非表示を制御。

定義

label start:
    $ time_left = 10
    $ is_modal = True
    show screen show_timer
    "タイマー終了。"
    hide screen show_timer

詳細

  • time_left を10秒、is_modal をTrueにリセット
  • タイマー画面を表示 (show screen show_timer)
  • タイマーが終了したらメッセージを表示
  • タイマー画面を非表示に (hide screen show_timer)

全体の動作フロー

  1. start ラベルでタイマー10秒・モーダルONで画面開始。
  2. show_timer 画面が出ると1秒ごとに decrease_time が呼ばれる。
  3. タイマーが0になったら is_modal がFalseになり、一度画面を隠してから display_timer_screen_again ラベル経由で再表示。
  4. 表示後、終了テキスト「タイマー終了。」を表示して画面非表示。
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?