Пользовательские курсоры мыши
В Ren'Py есть две системы для создания пользовательских курсоров мыши. Первая использует аппаратный курсор мыши, а вторая использует Ren'Py для отрисовки отображаемого объекта в качестве курсора.
Аппаратный курсор мыши имеет следующие преимущества:
Он очень быстрый.
Он требует очень мало ресурсов, оставляя Ren'Py время на другие задачи.
И ограничение:
Размеры курсоров ограничены. 32x32 гарантированно работает, 64x64 также, кажется, работает на многих системах.
Курсоры ограничены последовательностью файлов изображений.
Использование Ren'Py для отрисовки отображаемого объекта в качестве курсора инвертирует эти ограничения. Хотя курсорами может быть всё, что может нарисовать Ren'Py, Ren'Py необходимо производить эту отрисовку. При включенной тройной буферизации на компьютере может возникать задержка, которой нет у аппаратного курсора.
Аппаратный курсор мыши
Аппаратный курсор управляется переменной config.mouse. Эта
переменная представляет собой словарь, который сопоставляет имена курсоров со списком кадров.
Каждый кадр — это кортеж из трёх компонентов, который содержит файл изображения, а затем
смещения X и Y внутри этого изображения.
Например:
define config.mouse = { }
define config.mouse['default'] = [ ( "gui/arrow.png", 0, 0) ]
define config.mouse['spin' ] = [
( "gui/spin0.png", 7, 7 ),
( "gui/spin1.png", 7, 7 ),
( "gui/spin2.png", 7, 7 ),
( "gui/spin3.png", 7, 7 ),
( "gui/spin4.png", 7, 7 ),
( "gui/spin5.png", 7, 7 ),
( "gui/spin6.png", 7, 7 ),
( "gui/spin7.png", 7, 7 ),
]
Когда анимация состоит из нескольких кадров, кадры воспроизводятся со скоростью 20 кадров в секунду. Ren'Py будет менять курсор только при изменении изображения или смещений.
В следующей таблице перечислены различные состояния, в которых может находиться курсор, и их соответствующее использование:
Состояние |
Использование |
|---|---|
|
Используется постоянно, если не указано другое состояние. Он всегда должен присутствовать, так как используется при отсутствии более специфичного ключа |
|
Используется, когда игрок находится на экране «Say». |
|
Используется во время переходов. |
|
Используется, когда игрок находится в меню (например, choice). |
|
Используется, когда игроку предлагается ввести данные. |
|
Используется на imagemap. |
|
Используется, когда игрок наводит курсор на кнопку/imagebutton. |
|
Используется во время паузы, renpy.pause() |
|
Используется в главном меню. |
|
Используется в игровом меню. |
Каждый ключ может иметь необязательный префикс pressed_, который указывает
курсор, используемый при нажатии кнопки мыши. Например, pressed_button
используется, когда пользователь нажимает на кнопку. Чтобы определить стандартный стиль
курсора при нажатии, используйте ключ pressed_default. Он используется, когда
никакой другой курсор для нажатия не определён.
Например:
define config.mouse = { }
define config.mouse['default'] = [ ( "gui/arrow.png", 0, 0) ]
define config.mouse['pressed_default'] = [ ( "gui/arrow_pressed.png", 0, 0) ]
define config.mouse['button'] = [ ( "gui/arrow_button.png", 0, 0) ]
define config.mouse['pressed_button'] = [ ( "gui/arrow_button_pressed.png", 0, 0) ]
define config.mouse['menu'] = [ ( "gui/arrow_menu.png", 0, 0) ] # Этот курсор будет использоваться, когда игрок находится в меню
# Так как нет курсора "pressed_menu", вместо него будет использоваться курсор "pressed_default"
Отображаемый курсор мыши
Отображаемый курсор использует переменную config.mouse_displayable
и отображаемый объект MouseDisplayable. Например:
image mouse spin:
"gui/spin0.png"
rotate 0.0
linear 1.0 rotate 360.0
# Pause so image prediction can happen.
pause 1.0
repeat
define config.mouse_displayable = MouseDisplayable(
"gui/arrow.png", 0, 0).add("spin", "mouse spin", 9.9, 9.9)
- class MouseDisplayable(cursor, x=0, y=0)
Displayable, который является обёрткой для displayable курсора мыши и заставляет его двигаться по экрану, когда игрок перемещает мышь.
- cursor
Displayable, который используется для отрисовки мыши. Если это None, используется аппаратный курсор.
- x, y
Координаты активной точки (hotspot) относительно верхнего левого угла курсора, в виртуальных пикселях.
- add(name, cursor, x=0, y=0)
Этот метод добавляет второй курсор, который используется, когда отображается мышь с именем name. Метод возвращает MouseDisplayable, чтобы вызовы этого метода можно было объединять в цепочку.
Использование курсоров мыши
Обычный способ использования курсора мыши — это предоставление свойства mouse
с именем курсора элементу, который может получить фокус на
экране (кнопка или bar). Например:
screen test():
textbutton "Mouse Test" action NullAction() mouse "spin"
Также можно использовать default_mouse для установки курсора мыши
глобально:
$ default_mouse = "spin"