Spec-Zone.ru › Pygame
pygame.cursors
pygame модуль для ресурсов курсора

Pygame предоставляет управление системным курсором. Pygame поддерживает черно-белые курсоры (битовые курсоры), а также системные и цветные курсоры. Управление курсором осуществляется с помощью функций внутри pygame.mouse.

Этот модуль курсоров содержит функции для загрузки и декодирования различных форматов курсора. Это позволяет легко сохранять курсоры во внешних файлах или непосредственно в виде закодированных строк Python.

Модуль включает несколько стандартных курсоров. Функция pygame.mouse.set_cursor() принимает несколько аргументов. Все эти аргументы хранятся в одном кортеже, вызываемом так:

>>> pygame.mouse.set_cursor(*pygame.cursors.arrow)

Следующие переменные могут быть переданы в функцию %%%CODE_BLOCK_3%%:

  • pygame.cursors.arrow

  • pygame.cursors.diamond

  • pygame.cursors.broken_x

  • pygame.cursors.tri_left

  • pygame.cursors.tri_right

Этот модуль также содержит несколько курсоров в формате строк. Вам нужно передать их в функцию pygame.cursors.compile() перед использованием. Пример вызова:

>>> cursor = pygame.cursors.compile(pygame.cursors.textmarker_strings)
>>> pygame.mouse.set_cursor((8, 16), (0, 0), *cursor)

Следующие строки могут быть преобразованы в битовые карты курсора с помощью %%%CODE_BLOCK_11%%:

  • pygame.cursors.thickarrow_strings

  • pygame.cursors.sizer_x_strings

  • pygame.cursors.sizer_y_strings

  • pygame.cursors.sizer_xy_strings

  • pygame.cursor.textmarker_strings

pygame.cursors.compile()
создание двоичных данных курсора из простых строк
compile(strings, black='X', white='.', xor='o') -> data, mask

Последовательность строк может быть использована для создания двоичных данных курсора для системного курсора. Возвращает двоичные данные в виде двух кортежей. Эти кортежи можно передать в качестве третьего и четвертого аргументов функции pygame.mouse.set_cursor() соответственно.

При создании собственных строк курсора можно использовать любое значение для представления черных и белых пикселей. Некоторые системы позволяют установить специальный цвет переключения для системного цвета, это также называется цветом xor. Если система не поддерживает курсоры xor, этот цвет будет просто черным.

Высота должна быть кратна 8. Ширина всех строк должна быть одинаковой и кратна 8. Если эти два условия не выполнены, поднимается исключение %%%CODE_BLOCK_18%%. Пример набора строк курсора:

thickarrow_strings = (               #sized 24x24
  "XX                      ",
  "XXX                     ",
  "XXXX                    ",
  "XX.XX                   ",
  "XX..XX                  ",
  "XX...XX                 ",
  "XX....XX                ",
  "XX.....XX               ",
  "XX......XX              ",
  "XX.......XX             ",
  "XX........XX            ",
  "XX........XXX           ",
  "XX......XXXXX           ",
  "XX.XXX..XX              ",
  "XXXX XX..XX             ",
  "XX   XX..XX             ",
  "     XX..XX             ",
  "      XX..XX            ",
  "      XX..XX            ",
  "       XXXX             ",
  "       XX               ",
  "                        ",
  "                        ",
  "                        ")
pygame.cursors.load_xbm()
загрузка данных курсора из файла XBM
load_xbm(cursorfile) -> cursor_args
load_xbm(cursorfile, maskfile) -> cursor_args

Загружает курсоры для простого подмножества файлов %%%CODE_BLOCK_20%%. Файлы XBM традиционно используются для хранения курсоров в системах UNIX, представляют собой ASCII-формат, используемый для представления простых изображений.

Иногда значения черного и белого цветов будут разделены в двух отдельных файлах %%%CODE_BLOCK_22%%. Можно передать второй аргумент maskfile, чтобы загрузить оба изображения в один курсор.

Аргументы cursorfile и maskfile могут быть либо именами файлов, либо объектами файлов с методом readlines.

Значение cursor_args может быть передано напрямую функции %%%CODE_BLOCK_23%%.

pygame.cursors.Cursor
pygame объект, представляющий курсор
Cursor(size, hotspot, xormasks, andmasks) -> Cursor
Cursor(hotspot, surface) -> Cursor
Cursor(constant) -> Cursor
Cursor(Cursor) -> Cursor
Cursor() -> Cursor

В pygame 2 есть 3 типа курсоров, которые вы можете создать, чтобы добавить немного дополнительной полировки к вашей игре. Существуют курсоры типа битовая карта, которые существовали в pygame 1.x и скомпилированы из строки или загружаются из файла xbm. Затем есть курсоры типа система, где вы выбираете предустановленный курсор, который будет передавать то же значение, но будет выглядеть нативно в разных операционных системах. И, наконец, вы можете создать курсор цветной, отображая поверхность pygame как курсор.

Создание системного курсора

Выберите константу из этого списка, передайте её в pygame.cursors.Cursor(constant), и вы готовы к работе. Имейте в виду, что не все системы поддерживают все системные курсоры, и вместо этого может быть выполнена подстановка. Например, в macOS WAIT/WAITARROW должен отображаться как стрелка, а SIZENWSE/SIZENESW/SIZEALL — как закрытая рука. А в Wayland каждый курсор SIZE должен отображаться как рука.

Pygame Cursor Constant           Description
--------------------------------------------
pygame.SYSTEM_CURSOR_ARROW       arrow
pygame.SYSTEM_CURSOR_IBEAM       i-beam
pygame.SYSTEM_CURSOR_WAIT        wait
pygame.SYSTEM_CURSOR_CROSSHAIR   crosshair
pygame.SYSTEM_CURSOR_WAITARROW   small wait cursor
                                 (or wait if not available)
pygame.SYSTEM_CURSOR_SIZENWSE    double arrow pointing
                                 northwest and southeast
pygame.SYSTEM_CURSOR_SIZENESW    double arrow pointing
                                 northeast and southwest
pygame.SYSTEM_CURSOR_SIZEWE      double arrow pointing
                                 west and east
pygame.SYSTEM_CURSOR_SIZENS      double arrow pointing
                                 north and south
pygame.SYSTEM_CURSOR_SIZEALL     four pointed arrow pointing
                                 north, south, east, and west
pygame.SYSTEM_CURSOR_NO          slashed circle or crossbones
pygame.SYSTEM_CURSOR_HAND        hand

Создание курсора без передачи аргументов

В дополнение к доступным и описанным выше константам курсоров, вы также можете вызвать pygame.cursors.Cursor(), и ваш курсор готов (это то же самое, что вызов %%%CODE_BLOCK_27%%). Вызов одного из этих методов фактически создает системный курсор, используя изображение по умолчанию.

Создание цветного курсора

Чтобы создать цветной курсор, создайте Cursor из hotspot и surface. hotspot — это (x,y) координаты, определяющие, где на курсоре находится точная точка. Позиция точки захвата должна находиться в пределах %%%CODE_BLOCK_32%%.

Создание битового курсора

Когда курсор мыши виден, он будет отображаться как черно-белая битовая карта с использованием заданных массивов битовой маски. size — последовательность, содержащая ширину и высоту курсора. hotspot — последовательность, содержащая позицию точки захвата курсора.

Курсор имеет ширину и высоту, но позиция мыши представлена набором координат точек. Значение, переданное в переменную курсора %%%CODE_BLOCK_35%%, помогает pygame определить, в какой точке находится курсор.

xormasks — последовательность байтов, содержащая битовые маски xor курсора. Наконец andmasks, последовательность байтов, содержащая битовые маски курсора. Для создания этих переменных можно воспользоваться функцией pygame.cursors.compile().

Ширина и высота должны быть кратны 8, а массивы масок должны иметь правильный размер для заданной ширины и высоты. В противном случае будет возбуждено исключение.

copy()
копировать текущий курсор
copy() -> Cursor

Возвращает новый объект Cursor с теми же данными и точкой захвата, что и оригинал.

type
Получение типа курсора
type -> строка

Тип будет "system", "bitmap", или %%%CODE_BLOCK_41%%.

data
Получение данных курсора
data -> кортеж

Возвращает данные, использованные для создания этого объекта курсора, упакованные в кортеж.

Новое в pygame 2.0.1.

Пример кода для создания и настройки курсоров. (Нажмите на мышь, чтобы переключить курсор)

# pygame setup
import pygame as pg

pg.init()
screen = pg.display.set_mode([600, 400])
pg.display.set_caption("Example code for the cursors module")

# create a system cursor
system = pg.cursors.Cursor(pg.SYSTEM_CURSOR_NO)

# create bitmap cursors
bitmap_1 = pg.cursors.Cursor(*pg.cursors.arrow)
bitmap_2 = pg.cursors.Cursor(
    (24, 24), (0, 0), *pg.cursors.compile(pg.cursors.thickarrow_strings)
)

# create a color cursor
surf = pg.Surface((40, 40)) # you could also load an image 
surf.fill((120, 50, 50))        # and use that as your surface
color = pg.cursors.Cursor((20, 20), surf)

cursors = [system, bitmap_1, bitmap_2, color]
cursor_index = 0

pg.mouse.set_cursor(cursors[cursor_index])

clock = pg.time.Clock()
going = True
while going:
    clock.tick(60)
    screen.fill((0, 75, 30))
    pg.display.flip()

    for event in pg.event.get():
        if event.type == pg.QUIT or (event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE):
            going = False

        # if the mouse is clicked it will switch to a new cursor
        if event.type == pg.MOUSEBUTTONDOWN:
            cursor_index += 1
            cursor_index %= len(cursors)
            pg.mouse.set_cursor(cursors[cursor_index])

pg.quit()



Изменить на GitHub

© Pygame Developers.
Licensed under the GNU LGPL License version 2.1.
https://www.pygame.org/docs/ref/cursors.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API