Как сделать проверку реакции игрока на время в Ren'Py?

Рейтинг: 0Ответов: 1Опубликовано: 27.08.2023

Всем привет! Для разнообразия в своей визуальной новеллы, я захотел сделать проверку реакции игрока по подобию игры dead by daylight. Она выглядит примерно так:

введите сюда описание изображения

Ну лично мои успехи в этом:

  1. Я импортировал модуль datetime для работы с временем:
python:
    import datetime
  1. Создаk переменную, которая будет хранить время, когда игрок должен дать реакцию.
$ time_limit = datetime.datetime.now() + datetime.timedelta(seconds=10)
  1. Дальше я создал метку (label) для сцены, в которой происходит проверка времени реакции игрока:
label reaction_check:
    "У вас есть 10 секунд, чтобы дать реакцию."

    $ start_time = renpy.game.time.time()
   
    
    menu:
        "Реакция 1":
            $ reaction = "reaction_1"

    $ end_time = renpy.game.time.time()
    $ reaction_time = int(end_time - start_time)

    if reaction_time <= 10:
        "Вы дали реакцию вовремя. Nymos молодец {reaction_time} секунд."

    else:
        "Вы не дали реакцию вовремя. Nymos лох {reaction_time} секунд."

В данном примере сцена reaction_check устанавливает ограничение в 10 секунд для игрока, чтобы он дал реакцию. Затем вычисляется время между началом и концом реакции игрока, и осуществляется проверка, была ли реакция дана вовремя или нет.

Хоть и я написал проверку реакции, но все же не сделал похожую из игры dead by daylight. Я без понятии, как анимировать это и сделать так, чтобы если игрок попадал в белую линии, он выигрывал. Буду очень благодарен, если сможете помочь!

Ответы

▲ 2Принят

Итак, я смог самостоятельно найти решение. В моем примере я определял область попадания в переменных config.reaction_area_x, config.reaction_area_y и config.reaction_area_radius. Затем я отображал изображение линии с помощью сцены, используя команду scene bg reaction_line. В метке reaction_check я жду некоторое время с помощью команды pause, затем проверяем, попадает ли курсор игрока в область реакции, и устанавливаем флаг reaction_success в True, если попадает.

init python:
    import random

# Определение области попадания
define config.reaction_area_x = 400
define config.reaction_area_y = 300
define config.reaction_area_radius = 200

label start:

    # Визуальный элемент с белой линией
    image reaction_line = "reaction_line.png"

    # Переменная для хранения флага реакции игрока
    $ reaction_success = False

    # Метка для сцены проверки реакции
    label reaction_check:

        # Отображение изображения линии
        scene bg reaction_line

        # Ожидание реакции игрока
        pause 2.0

        # Проверка попадания в область реакции
        $ mouse_x, mouse_y = renpy.mouse.x, renpy.mouse.y
        $ distance = ((mouse_x - config.reaction_area_x) ** 2 + (mouse_y - config.reaction_area_y) ** 2) ** 0.5

        if distance <= config.reaction_area_radius:
            $ reaction_success = True

    if reaction_success:
        "Вы попали в белую линию! Вы выиграли!"
    else:
        "Вы не попали в белую линию! Вы проиграли!"