Статья Автор: Омарбек Нұр-Мұхаммед

Примеры

Пример

В этом примере происходит рисование прямоугольника с помощью курсора мыши.

 

Шаг 1: объявление переменных

  • draw (bool) - если значение True, то прямоугольник рисуется, в противном случае прямоугольник стирается
  • start (tuple) - координаты левого верхнего угла прямоугольника
draw = False
start = 0

 

Шаг 2: нажатие на левую кнопку мыши

elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
    draw = True
    start = event.pos

В переменную start записываются координаты курсора мыши.

 

Шаг 3: рисование прямоугольника

elif event.type == pygame.MOUSEMOTION:
    if draw:
        position = event.pos
        width = position[0] - start[0]
        height = position[1] - start[1]
        screen.fill((0, 0, 0))
        pygame.draw.rect(screen, (255, 255, 255), (start[0], start[1], width, height), 1)
        pygame.display.update()
    else:
        screen.fill((0, 0, 0))
        pygame.display.update()
  • position - текущие координаты курсора мыши
  • width - ширина прямоугольника (текущее значение по оси X - стартовое значение по оси X)
  • height - высота прямоугольника (текущее значение по оси Y - стартовое значение по оси Y)

 

Шаг 4: отпуск левой кнопки мыши

elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
    draw = False

Если левая кнопка мыши отпущена, то переменной draw присваивается False. Если переменная draw ложь, то прямоугольник стирается.


Код

import sys
import pygame
pygame.init()

SIZE = WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()

draw = False
start = 0

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            draw = True
            start = event.pos

        elif event.type == pygame.MOUSEMOTION:
            if draw:
                position = event.pos
                width = position[0] - start[0]
                height = position[1] - start[1]
                screen.fill((0, 0, 0))
                pygame.draw.rect(screen, (255, 255, 255), (start[0], start[1], width, height), 1)
                pygame.display.update()
            else:
                screen.fill((0, 0, 0))
                pygame.display.update()

        elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
            draw = False

    clock.tick(30)

В этом примере используется функция для возврата состояния всех кнопок:

buttons = pygame.mouse.get_pressed()  # tuple(bool, bool, bool) => (ЛКМ, СКМ, ПКМ)

 

И теперь можно собрать условие, чтобы отреагировать на нажатие левой кнопки мыши:

if buttons[0]:
    position = pygame.mouse.get_pos()

 

Предыдущий пример можно переписать:

import sys
import pygame
pygame.init()

SIZE = WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()

start = None

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    buttons = pygame.mouse.get_pressed()  # tuple(bool, bool, bool) => (ЛКМ, СКМ, ПКМ)

    if buttons[0]:
        position = pygame.mouse.get_pos()
        if start is None:
            start = position
        width = position[0] - start[0]
        height = position[1] - start[1]
        screen.fill((0, 0, 0))
        pygame.draw.rect(screen, (255, 255, 255), (start[0], start[1], width, height), 1)
        pygame.display.update()
    else:
        start = None
        screen.fill((0, 0, 0))
        pygame.display.update()

    clock.tick(30)

В самом начале в переменной start отсутствует значение. Если в переменной отсутствует значение, то программа запишет в переменную текущие координаты курсора мыши. Если левая кнопка мыши отпущена, то переменной снова присваивается значение None.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать